LINQ to SQL
通过C#使用asp.net 4。
在我的数据访问层,我有保存和更新记录的方法。 节省很简单,但更新很繁琐。
我以前使用过SubSonic,因为它有很好的记录,并且知道如果我加载了一条记录,改变了几条记录然后再保存它,它就认为它是一个更新,并没有试图在数据库中保存一个新记录。
我不知道如何在LINQ中做同样的事情。 因此我的工作流程如下所示:
如果我只保存'记录A',我最终会在数据库中添加一个新条目。
显然,只通过记录A并执行如下操作会更好:
RecordA.Update();
我假设我在这里失踪了一些东西,但我无法在网上找到一个简单的答案。
当LINQ到SQL更新数据库中的记录时,它需要确切地知道哪些字段已更改才能更新这些记录。 你基本上有三个选择:
SubmitChanges()
。 任何分配了现有值的属性都不会被更新。 Attach
未修改和已修改的值同时使用。 我通常使用第一个选项,因为它是最简单的。 有两个数据库调用会导致性能损失,但除非您正在进行大量更新,否则无关紧要。
您可以使用Table
实例上的Attach
方法完成您想要的操作,并通过DataContext
上的SubmitChanges()
方法进行提交。
这个过程可能并不像我们想的那样直截了当,但您可以阅读David DeWinter的LINQ to SQL:更新实体以获取更深入的解释/教程。
假设你有一个产品类或数据库,那么你将不得不这样做。
DbContext _db = new DbContext();
var _product = ( from p in _db.Products
where p.Id == 1 // suppose you getting the first product
select p).First(); // this will fetch the first record.
_product.ProductName = "New Product";
_db.SaveChanges();
// this is for EF LINQ to Objects
_db.Entry(_product).State = EntityState.Modified;
_db.SaveChanges();
-------------------------------------------------------------------------------------
this is another example using Attach
-------------------------------------------------------------------------------------
public static void Update(IEnumerable<Sample> samples , DataClassesDataContext db)
{
db.Samples.AttachAll(samples);
db.Refresh(RefreshMode.KeepCurrentValues, samples)
db.SubmitChanges();
}
如果将实体附加到上下文,然后刷新(选择KeepCurrentValues),则Linq to SQL将从服务器获取这些实体,对它们进行比较,并标记更新的实例
链接地址: http://www.djcxy.com/p/61003.html上一篇: LINQ to SQL