65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 LINQ 实体进行 CRUD 操作

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.84/5 (18投票s)

2009年7月10日

CPOL

5分钟阅读

viewsIcon

122241

downloadIcon

3821

使用 LINQ 实体进行 CRUD 操作

目录

引言和目标

这是一个相当简单的教程,专为希望学习如何使用 LINQ 实体执行 CRUD 操作的 LINQ 新手准备。我确信许多经验丰富的 LINQ 用户会批评这篇文章过于浅显。我发现 LINQ 的一个最大陷阱是内存更新服务,我认为任何 LINQ 新手都必须了解这一点。

因此,我们将从理解内存更新和物理提交之间的区别开始,然后深入研究每个数据库操作的代码。再次声明,这篇文章是我需要完成庞大的 LINQ FAQ 项目所需进行的小冲刺之一。

我们将要讨论内容的屏幕截图

刚接触 LINQ - 以下是一些快速入门指南

LINQ 内存提交和物理提交

实体对象构成了 LINQ 技术的基础。因此,当任何数据提交到数据库时,它都会通过 LINQ 对象。数据库操作通过 'DataContext' 类完成。如前所述,实体构成了 LINQ 的基础,因此所有数据都首先发送到这些实体,然后路由到实际的物理数据库。由于这种工作方式,数据库提交是一个两步过程。第一步是内存操作,最后一步是物理提交。
为了进行内存操作,'DataContext' 提供了 'DeleteOnSubmit' 和 'InsertOnSubmit' 方法。当我们从 'DataContext' 类调用这些方法时,它们会在实体对象的内存中添加和更新数据。请注意,这些方法不会更改/添加实际数据库中的新数据。

一旦我们完成了内存操作并希望将所有更新发送到数据库,我们就需要调用 'SubmitChanges()' 方法。此方法最终将数据提交到物理数据库。

所以,让我们考虑一个客户表(customeridcustomercodecustomername),看看如何执行内存操作和物理提交操作。

步骤 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 源代码。

如需进一步阅读,请观看以下面试准备视频和分步视频系列。

© . All rights reserved.