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. mvc partialView断点调试问题

    mvc中的partialview 在前端f12调试时,默认看不到代码的.  在Js中加上debugger;  调试时会走到断点,多出个VM打头的局部视图页面.

  2. 推送kafka消息失败

    晚上变更 怎么都推不过去,蛋疼,睡饱后加了个hosts没想到好了,然后搜了一下,大概是如下的原因 转自 https://www.cnblogs.com/linlianhuan/p/9258061.ht ...

  3. 使 nodejs 代码 在后端运行(forever)

    情境 运行nodejs的程序,使用命令:node xxx.js,但是关掉终端,程序也关闭了,如何让node app的程序一直运行? 解决 1.安装forever npm install -g fore ...

  4. 阿里开源支持缓存线程池的ThreadLocal Transmittable ThreadLocal(TTL)

    功能 在使用线程池等会缓存线程的组件情况下,提供ThreadLocal值的传递功能. JDK的InheritableThreadLocal类可以完成父子线程值的传递. 但对于使用线程池等会缓存线程的组 ...

  5. NuGet修改packages目录/迁移缓存文件夹

    如图,以下是NuGet默认配置 打开C:\Program Files (x86)\NuGet\Config目录的Microsoft.VisualStudio.Offline.config可以看见如下配 ...

  6. layoutSubviews在以下情况下会被调用

    1.init初始化不会触发layoutSubviews2.addSubview会触发layoutSubviews3.设置view的Frame会触发layoutSubviews,当然前提是frame的值 ...

  7. .Netcore 2.0 Ocelot Api网关教程(6)- 配置管理

    本文介绍Ocelot中的配置管理,配置管理允许在Api网关运行时动态通过Http Api查看/修改当前配置.由于该功能权限很高,所以需要授权才能进行相关操作.有两种方式来认证,外部Identity S ...

  8. unity 读取灰度图生成三维地形并贴图卫星影像

    从 https://earthexplorer.usgs.gov/ 下载高程数据 从谷歌地球上保存对应地区卫星图像 从灰度图创建地形模型,并将卫星影像作为贴图 using System.Collect ...

  9. OPC Utgard的数据访问方式

    1.同步读取某个点位的值 Item项的read()方法 Server server = new Server(BaseConfiguration.getCLSIDConnectionInfomatio ...

  10. 差分约束算法————洛谷P4878 [USACO05DEC] 布局

    题目: 不难看出题意主要是给出ml+md个格式为xi-xj<=ak的不等式,xi-xj为i,j俩头牛的距离,要我们求x1-xn的最大值. 经过上下加减我们可以将这几个不等式化成x1-xn< ...