【问题标题】:Locking in Entity Framework锁定实体框架
【发布时间】:2011-05-27 06:13:28
【问题描述】:

我在 C# 中使用实体框架。

因为实际版本对非键属性没有唯一约束,所以我想(可能使用 TRANSACTIONS)原子地测试某个属性 NAME 是否在某个表(实体)中,如果没有,那么我会添加新实体和提交。

如何做到这一点?还是有更好的解决方案?

【问题讨论】:

标签: c# .net database entity-framework transactions


【解决方案1】:

一种方法是在数据库上定义约束。

由于实体框架不知道数据库级别的约束,因此您应该编写约束脚本(即创建一个 .SQL 文件),以便您可以将其添加到数据库的任何新实例中。

另一种方法是为每个实体类型(例如 CustomerRepository)实现一个标准存储库,然后在该存储库的 Create 方法中进行检查。这本身并不能保证唯一性,因为两个用户可能同时创建一个具有相同名称的实体,并且在您尝试提交(即 SaveChanges)之前检查不会捕获它,但情况也是如此当您在 DB 上定义唯一性约束时...

【讨论】:

  • 谢谢,我会手动编写创建约束的SQL脚本。
【解决方案2】:

您必须在数据库中为该列创建唯一索引。事务将无济于事,因为应用程序或上下文的两个不同实例不会对编程级别锁定起作用。

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多