ELinq学习一

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

posted @ 2018-10-08 14:21  skybirdzw  阅读(232)  评论(0编辑  收藏  举报