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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端