0

我使用实体框架4.0来访问具有唯一列约束的表中的数据。如果违反约束条件,我按照预期调用SaveChanges()时发生异常。我的问题是我是否应该允许将例外抛在首位。我也可以做一个选择,以避免插入重复的数据(我认为一个交易是必要的)。使用实体框架时处理唯一约束的最佳方法

在这种情况下,普遍接受的最佳实践是什么?

回答

3

避免异常通常是一个好主意 - 抛出异常是一个相当复杂且耗时且耗费资源的操作。所以,如果你可以轻松地检查一个唯一的键值是否已经存在,那么我可能会这样做。假设您在数据库级别对该列具有唯一索引或唯一约束,那么(至少对于SQL Server而言)在该列上已经有一个索引,因此检查特定值会相当简单,并且不会有巨大的性能影响。

另一个问题是:您认为这会发生多久?一天一次?每两周一次?一分钟几次?如果这种情况发生的很少 - 一旦发生在蓝色的月亮中 - 我不会首先检查 - 在这种情况下,让异常发生并处理它。

所以我想这实际上是首先检查的费用是多少,以及发生的频率如何?如果你可以很容易地检查它 - >一定要这样做!但是,如果这是一个相当复杂的操作来检查,而且它很少发生,那么就处理这个异常。

+0

感谢您的常识答案;这几乎是我的想法。由于在这种情况下违反约束条件很少见,所以我会保持原样。 – 2010-10-31 20:16:28

+2

嗯...我不能同意。抛出一个异常*不像查询数据库那样昂贵。也就是说,应该在插入/更新操作之前查询数据库,这可能导致违反唯一约束。 – CodeMonkeyKing 2011-03-09 23:05:31

+3

@CodeMonkeyKing就是这一点。如果您在插入数据库之前查询数据库,您将始终有额外的往返处罚,即使如此,插入可能会在您的查询之间发生并使第一个数据无效。就像Marc说的那样,检查你的系统中这种类型的异常是否罕见,如果是这样,就让数据库处理它。 – andrecarlucci 2012-02-14 01:08:59