【问题标题】:Best way to handle unique constraints when using Entity Framework使用实体框架时处理唯一约束的最佳方法
【发布时间】:2010-10-31 07:09:19
【问题描述】:

我正在使用 Entity Framework 4.0 访问具有唯一列约束的表中的数据。如果违反了约束,当我调用 SaveChanges() 时会发生异常,正如预期的那样。我的问题是我是否应该首先允许抛出异常。我也可以进行选择以避免插入重复的数据(我假设事务是必要的)。

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

【问题讨论】:

    标签: .net entity-framework exception-handling unique-constraint


    【解决方案1】:

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

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

    所以我想这真的是一个问题,首先检查的费用是多少,检查的频率是多少?如果您可以很容易地检查它-> 一定要这样做!但是,如果这是一个相当复杂的检查操作,并且很少发生,那么只需处理异常即可。

    【讨论】:

    • 感谢常识性的回答;这几乎就是我的想法。由于在这种情况下很少发生违反约束的情况,因此我将保持原样。
    • 嗯...我不能同意。抛出异常没有像查询数据库那样昂贵。也就是说,您应该在可能导致违反唯一约束的插入/更新操作之前查询数据库。
    • @CodeMonkeyKing 这就是重点。如果您在插入之前查询数据库,您总是会受到额外的往返惩罚,即便如此,您的查询之间可能会发生插入并使第一个无效。就像 Marc 说的,检查这种类型的异常在你的系统中是否很少见,如果是,就让数据库处理它。
    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 2012-10-15
    • 2013-09-24
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多