【问题标题】:Concurrency with Linq To Sql and ASP.NETLinq To Sql 和 ASP.NET 的并发性
【发布时间】:2009-03-18 20:24:04
【问题描述】:

在 ASP.net 应用程序中使用 LINQ to SQL 时检查并发问题的最佳方法是什么。

在我的应用程序中,我从数据库中检索记录并在可编辑的文本框中显示字段。然后datacontext就被扔掉了。

我应该如何保存实体对象,以便我可以使用 L2Sql 的内置并发功能?我无法在会话中保存对象并将其重新附加到新的数据上下文:l2s 抱怨该对象不是新的。

LinqDataSource 设法做到这一点。有人知道怎么做吗?

【问题讨论】:

    标签: c# .net sql-server linq linq-to-sql


    【解决方案1】:

    Linq2Sql 中乐观并发的工作方式是存储原始值并在插入时比较它们。

    如果您丢弃数据上下文,您会丢失原始值。

    我通常做的是在我要保存时再次从数据库中加载对象,然后使用表单中的值修改该对象。

    【讨论】:

    • 是的,但是如果我这样做(我之前是这样),任何其他用户的更改都将被加载,并且 Linq to sql 不会引发并发错误。
    • 您是否尝试过查看 Table.Attach(TEntity entity, TEntity original) 方法?
    • 这与仅从数据库中获取对象并进行更改并执行 SubmitChanges() 有何不同?
    • 这有效,但只有当我没有时间戳列时(它检查每个字段)。如果我想使用时间戳列怎么办?这是错误:“Faculty”类型对象的成员“版本”的值已更改。由数据库计算或生成的成员不能更改。
    • 只比较时间戳值而不是覆盖它
    【解决方案2】:

    Linq To SQL 默认支持optimistic concurrency control

    您可以更改表中每个字段的UpdateCheck 属性:

    在 LINQ to SQL 对象模型中,一个 发生乐观并发冲突 当以下两种情况 是真的:

    • 客户端尝试向数据库提交更改。
    • 自 客户上次阅读。

    【讨论】:

    • 他们的问题是他们在回发时丢失了DataContext,并且您无法将原始对象附加到新的DC。
    猜你喜欢
    • 2010-09-16
    • 2011-04-17
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多