使用 LINQ 实体进行 CRUD 操作






4.84/5 (18投票s)
使用 LINQ 实体进行 CRUD 操作
目录
- 引言和目标
- 刚接触 LINQ - 以下是一些快速入门指南
- LINQ 内存提交和物理提交
- 步骤 1:创建实体 Customer 类
- 步骤 2:使用 LINQ 创建
- 步骤 3:使用 LINQ 更新
- 步骤 4:使用 LINQ 删除
- 步骤 5:自解释的 LINQ Select and Read
- LINQ CRUD 代码
引言和目标
这是一个相当简单的教程,专为希望学习如何使用 LINQ 实体执行 CRUD 操作的 LINQ 新手准备。我确信许多经验丰富的 LINQ 用户会批评这篇文章过于浅显。我发现 LINQ 的一个最大陷阱是内存更新服务,我认为任何 LINQ 新手都必须了解这一点。
因此,我们将从理解内存更新和物理提交之间的区别开始,然后深入研究每个数据库操作的代码。再次声明,这篇文章是我需要完成庞大的 LINQ FAQ 项目所需进行的小冲刺之一。
刚接触 LINQ - 以下是一些快速入门指南
LINQ 内存提交和物理提交
实体对象构成了 LINQ 技术的基础。因此,当任何数据提交到数据库时,它都会通过 LINQ 对象。数据库操作通过 'DataContext
' 类完成。如前所述,实体构成了 LINQ 的基础,因此所有数据都首先发送到这些实体,然后路由到实际的物理数据库。由于这种工作方式,数据库提交是一个两步过程。第一步是内存操作,最后一步是物理提交。
为了进行内存操作,'DataContext
' 提供了 'DeleteOnSubmit
' 和 'InsertOnSubmit
' 方法。当我们从 'DataContext
' 类调用这些方法时,它们会在实体对象的内存中添加和更新数据。请注意,这些方法不会更改/添加实际数据库中的新数据。
一旦我们完成了内存操作并希望将所有更新发送到数据库,我们就需要调用 'SubmitChanges()
' 方法。此方法最终将数据提交到物理数据库。
所以,让我们考虑一个客户表(customerid
、customercode
和 customername
),看看如何执行内存操作和物理提交操作。
步骤 1:创建实体 Customer 类
因此,作为第一步,我们创建了如下所示的 `customer` 类的实体,如以下代码片段所示。
[Table(Name = "Customer")]
public class clsCustomerEntity
{
private int _CustomerId;
private string _CustomerCode;
private string _CustomerName;
[Column(DbType = "nvarchar(50)")]
public string CustomerCode
{
set
{
_CustomerCode = value;
}
get
{
return _CustomerCode;
}
}
[Column(DbType = "nvarchar(50)")]
public string CustomerName
{
set
{
_CustomerName = value;
}
get
{
return _CustomerName;
}
}
[Column(DbType = "int", IsPrimaryKey = true,IsDbGenerated=true)]
public int CustomerId
{
set
{
_CustomerId = value;
}
get
{
return _CustomerId;
}
}
}
步骤 2:使用 LINQ 创建
创建 DataContext
所以第一件事是使用连接字符串创建一个 'datacontext
' 对象。
DataContext objContext = new DataContext(strConnectionString);
设置插入数据
使用 'DataContext
' 对象创建连接后,下一步是创建 customer 实体对象并将数据设置到对象属性。
clsCustomerEntity objCustomerData = new clsCustomerEntity();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;
执行内存更新
然后我们使用 'InsertOnSubmit
' 方法在实体对象本身中进行内存更新。
objContext.GetTable<clsCustomerEntity>().InsertOnSubmit(objCustomerData);
执行最终物理提交
最后,我们进行物理提交到实际数据库。请注意,直到我们调用 'SubmitChanges()
',数据才最终提交到数据库。
objContext.SubmitChanges();
最终的 Create LINQ 代码
下面是最终整合的 LINQ 代码
DataContext objContext = new DataContext(strConnectionString);
clsCustomerEntity objCustomerData = new clsCustomerEntity();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;
objContext.GetTable<clsCustomerEntity>().InsertOnSubmit(objCustomerData);
objContext.SubmitChanges();
步骤 3:使用 LINQ 更新
所以,让我们进行下一个数据库操作,即更新。
创建 DataContext
一如既往,我们首先需要使用连接字符串创建一个 'datacontext
' 对象,如创建步骤中所述。
DataContext objContext = new DataContext(strConnectionString);
选择我们要更新的 Customer LINQ 对象
使用 LINQ 查询获取要更新的 LINQ 对象
var MyQuery = from objCustomer in objContext.GetTable<clsCustomerEntity>()
where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text)
select objCustomer;
最后设置新值并将数据更新到物理数据库
执行更新并调用 'SubmitChanges()
' 进行最终更新。
clsCustomerEntity objCustomerData =
(clsCustomerEntity)MyQuery.First<clsCustomerEntity>();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;
objContext.SubmitChanges();
LINQ Update 的最终代码
以下是最终的 LINQ 更新查询。
DataContext objContext = new DataContext(strConnectionString);
var MyQuery = from objCustomer in objContext.GetTable<clsCustomerEntity>()
where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text)
select objCustomer;
clsCustomerEntity objCustomerData =
(clsCustomerEntity)MyQuery.First<clsCustomerEntity>();
objCustomerData.CustomerCode = txtCustomerCode.Text;
objCustomerData.CustomerName = txtCustomerName.Text;
objContext.SubmitChanges();
步骤 4:使用 LINQ 删除
让我们进行下一个数据库操作,删除。
DeleteOnSubmit
我们不会回顾创建 data context 和选择 LINQ 对象等之前的步骤。它们都在上一节中进行了说明。要从内存中删除对象,我们需要调用 'DeleteOnSubmit()
',要从最终数据库中删除,我们需要使用 'SubmitChanges()
'。
objContext.GetTable<clsCustomerEntity>().DeleteOnSubmit(objCustomerData);
objContext.SubmitChanges();
步骤 5:自解释的 LINQ Select and Read
现在在最后一步,根据条件选择和读取 LINQ 对象。以下代码片段显示了如何执行 LINQ 查询并将对象值设置到 ASP.NET UI。
DataContext objContext = new DataContext(strConnectionString);
var MyQuery = from objCustomer in objContext.GetTable<clsCustomerEntity>()
where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text)
select objCustomer;
clsCustomerEntity objCustomerData =
(clsCustomerEntity)MyQuery.First<clsCustomerEntity>();
txtCustomerCode.Text = objCustomerData.CustomerCode;
txtCustomerName.Text = objCustomerData.CustomerName;
LINQ CRUD 代码
您可以从此处下载完整的 CRUD 源代码。
如需进一步阅读,请观看以下面试准备视频和分步视频系列。