ELinq安装:在Nuget控制台中输入:install-package ELinq
一、ELinq与DLinq和EF的功能差异

二、数据库对照表

三、CRUD操作
1、插入(Insert)
(1)简单形式
方法一:
Northwinddb = new Northwind("数据库连接字符串");
var newCustomer = new Customer
{
    CustomerID = "XX1",
    CompanyName = "Company1",
    ContactName = "Contact1",
    City = "Seattle",
    Country = "USA"
};
db.Customers.Insert(newCustomer);")
注:生成的Sql语句为:
INSERT INTO Customers(CustomerID, ContactName, CompanyName, Phone, City, Country)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5)

方法二:
Model.User user = new Model.User
{
     Name = "新记录",
     Age = 23,
     Gender = true
};
using (var ctx = cfg.CreateDbContext())
      ctx.Set<User>().Insert(user);
注:生成的Sql语句为:
INSERT INTO [User] ( [Name], [Gender],[Age] )
VALUES (@p0, 1 , 23)

(2)一对多关系
说明:Orders和Customers是一对多的关系
 var newCustomer = new Customer
{
    CustomerID = "XX4",
    CompanyName = "Company4",
    ContactName = "Contact4",
    City = "Seattle",
    Country = "USA"
};
var newOrder = new Order
{  
    OrderDate = DateTime.Today,
    CustomerID=newCustomer.CustomerID
};
db.Customers.Insert(newCustomer);
db.Orders.Insert(newOrder);
注:生成的Sql语句为:
INSERT INTO Customers(CustomerID, ContactName, CompanyName, Phone, City, Country)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5)
INSERT INTO Orders(CustomerID, OrderDate)
VALUES (@p0, @p1)

(3):多对多关系
说明:在多对多关系中我们需要依次提交

2、更新(Update)
方法一:
说明:更新操作,先获取对象,进行修改操作之后,直接调用Update()方法即可提交。
var customer= new Customer
{
    CustomerID = "XX1",
    CompanyName = "Company1",
    ContactName = "Contact1",
    City = "Portland",
    Country = "USA"
};
db.Customers.Update(customer, d => d.City == "Detroit");
语句描述:使用Update将对检索到的一个Customer对象做出的更新保持回数据库。

方法二:
语句描述:实例化一个Use对象(其中包含唯一的标识),是以对象的形式通过唯一标识找到该记录并更新数据库表中的记录,Update方法返回一个整型值,成功为1,否则为0。
Model.User user = new Model.User
{
     ID = 5,
     Name = "修改新记录",
     Age = 24,
     Gender = false
};
using (var ctx = cfg.CreateDbContext())   
     ctx.Set<User>().Update(user);
注:该语句生成的sql语句为:
UPDATE [User]
SET [Name] = @p0, [Gender] = 0, [Age] = 24
WHERE ( [ID] = 5 )

3、删除(Delete)
方法一:
var customer = new Customer
{
    CustomerID = "XX1",
    CompanyName = "Company1",
    ContactName = "Contact1",
    City = "Seattle",
    Country = "USA"
};
db.Customers.Delete(customer);

方法二:
using (var ctx = cfg.CreateDbContext())
{
   ctx.Set<User>().Delete(p=> p.ID == 5);
}

4、 查询(selectMany)
适用场景:在表关系中有一对一关系,一对多关系,多对多关系。对各表之间的关系,就用这些实现对多个表的操作。

一对多关系(1 to Many)
var query=
    from c in db.Customers
    from o in c.Orders
    where c.City == "London"
    select o;
语句描述:Customers和Orders是一对多的关系,即Orders在Customers类中是以IDbSet形式出现。所以第二个from是从c.Orders而不是从db.Orders中筛选。
注:该语句生成的Sql语句为:
SELECT t1.OrderID, t1.CustomerID AS CustomerID1,t1.OrderDate
FROM Customers AS t0
INNER JOIN Orders AS t1 ON (t1.CustomerID = t0.CustomerID)
WHERE (t0.City = @p0)

多对多关系(Many to Many)
 var q =
    (from e in db.Orders
    from et in e.Details
    from ett in db.Products.Where(o=>o.ID==et.ProductID)
    where e.CustomerID == "ALFKI"

select new
    {
       e.CustomerID,
       et.ProductID
    }).ToList();
语句描述:多对多连接一般会涉及三个表(如果有一个表是自连接的那就可能是2个表)。这个语句涉及三个表Orders,Order Details,Products。他们的关系是1:M:1。
注:生成的Sql语句是:
SELECT t0.CustomerID, t1.ProductID
FROM Orders AS t0
INNER JOIN [Order Details] AS t1
  ON (t1.OrderID = t0.OrderID)
INNER JOIN Products AS t2
  ON (t2.ID = t1.ProductID)
WHERE (t0.CustomerID = @p0)

单表查询
//查询所有的记录
using (var ctx = cfg.CreateDbContext())
    ctx.Set<User>().ToArray();

//查询ID为5的这条记录
using (var ctx = cfg.CreateDbContext())
    ctx.Set<User>().Get(5); 
语句描述:第一条语句是查询表中所有的记录,存储到User[]数组里面; 第二条语句查询ID为5的记录。
注:语句生成的sql语句分别为:
SELECT t0.[ID], t0.[Name], t0.[Gender], t0.[Age]
FROM [User] AS t0
 
SELECT t0.[ID], t0.[Name], t0.[Gender], t0.[Age]
FROM [User] AS t0
WHERE ( t0.[ID] = 5 )

四、建立OR映射关系
ELinq建立表之间的映射关系方法有三种:
a. 基于标签的方式:TableAttribute;
b. 基于命名策略的方式;
c. 基于FluentMapping 的方式;

参考:
https://elinq.codeplex.com/
http://www.cnblogs.com/netcasewqs/archive/2012/12/08/2809319.html

ELinq学习一的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

随机推荐

  1. 如何永久激活(破解) IntelliJ IDEA 2018.2.2

    原 如何永久激活(破解) IntelliJ IDEA 2018.2.2 版权声明:本文为博主原创文章,转载不需要博主同意,只需贴上原文链接即可. https://blog.csdn.net/zhige ...

  2. 【NetDevops】网络自动化运维--1获取用户基本信息

     版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.  之前博客的云主机到期了没续费,被删啦最重要的是没有备份!此处省略几个字.....      ...

  3. c++ for each

    #include <iostream>#include <vector>#include <list> using namespace std; int main( ...

  4. MySQL连接错误:Can't connect to MySQL server on'localhost' (10055)

    在Windows服务器上确认服务器和mysql都是正常运行,但就是连接不上.搜了一下别人的解决方案, 参考这篇https://blog.csdn.net/langren697/article/deta ...

  5. HBase管理与监控——统计表行数

    背景 HBase统计 RowCount 的方法有好几种,并且执行效率差别巨大,以下3种方法效率依次提高.   一.hbase-shell的count命令 这是最简单直接的操作,但是执行效率非常低,适用 ...

  6. MVP模式的学习

    简书: http://www.jianshu.com/p/f6fd9656f619 Github: https://github.com/tsaievan/YFMVPDemo

  7. CImage 和 CvvImage 命名空间问题

    [问题:名称CImage同时在两个库中出现] 1.出现: ATL #include <atlimage.h> OpenCv #include <highgui.h> #defi ...

  8. Aspose.Words提取word文档中的图片文件

    /// <summary> /// 提取word中的图片 /// </summary> /// <param name="filePath">w ...

  9. IO阻塞模型、IO非阻塞模型、多路复用IO模型

    IO操作主要包括两类: 本地IO 网络IO 本地IO:本地IO是指本地的文件读取等操作,本地IO的优化主要是在操作系统中进行,我们对于本地IO的优化作用十分有限 网络IO:网络IO指的是在进行网络操作 ...

  10. Encoding.GetEncoding 编码列表

    代码页 名称 显示名称   37 IBM037 IBM EBCDIC(美国 - 加拿大)   437 IBM437 OEM 美国   500 IBM500 IBM EBCDIC(国际)   708 A ...