2011-05-27 94 views
0

我使用实体框架与C#。我想(可能使用TRANSACTIONS)自动测试某个属性NAME是否在某个表(实体)中,如果不是,那么我会添加新的实体并承诺。锁定实体框架

这怎么办?还是有更好的解决方案?

+0

http://stackoverflow.com/questions/1963829/how-can-i-add-constraints-to-an-ado-net-entity – 2011-05-27 06:16:13

+0

您是否尝试将EF查询放入同一个TransactionScope中? – 2011-05-27 07:07:38

回答

1

做到这一点的一种方法是定义DB上的约束。

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

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

+0

谢谢,我将手动编写SQL脚本创建约束。 – Cartesius00 2011-05-27 08:57:03

1

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