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. win系统动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)

    动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...

  2. 快速根据注释生成接口文档网页工具——Apidoc的使用教程

    1,安装Node.js的npm工具环境: 如有不懂,请看我的博客:“https://blog.csdn.net/sinat_28371057/article/details/81612661“ 2,n ...

  3. vim基础学习1---简单命令

    1:vim abc:如果有abc文件,则打开,否则创建之后打开 2:输入"i",才可以输入东西 3:按Esc,它是底行模式,再敲":wq 回车" 保存退出. 4 ...

  4. sparkStream---1

    1.本地scala版 import org.apache.spark._ import org.apache.spark.streaming._ import org.apache.spark.str ...

  5. Python实现的选择排序算法原理与用法实例分析

    Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...

  6. Linear regression with one variable - Cost function intuition I

    摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第二章<单变量线性回归>中第8课时<代价函数的直观认识 - 1>的视频原文字幕.为本人在视频学习过 ...

  7. 重置fedora root密码

    本方法适用于fedora16(含)以上(使用GRUB2) 步骤如下: Step 1:系统菜单,在linux上按“e”键进行编辑 Step 2:使用上下键找到以字符串“linux”或“linux16”( ...

  8. 可执行jar包与依赖jar包

    1.在IDEA的pom文件中有如下配置的,打包出来的是可执行jar包,可执行jar包不能作为依赖. <build> <plugins> <plugin> <g ...

  9. 【计算机视觉】双目测距(六)--三维重建及UI显示

    原文: http://blog.csdn.NET/chenyusiyuan/article/details/5970799 在获取到视差数据后,利用 OpenCV 的 reProjectImageTo ...

  10. private关键字 this关键字

    基本类型的布尔值boolean定义get方法,名称应该为isMale 当方法的局部变量和类的成员变量重名的时候,根据就近原则,有限使用局部变量, 如果需要访问成员变量  则使用this.name 构造 ...