【发布时间】:2009-07-17 22:37:51
【问题描述】:
我使用数据库作为一种缓存 - 目的是存储当前已知的“事实”(细节并不那么有趣)。然而,至关重要的是,我想避免插入重复的事实。为此,当前的数据访问代码在很多地方都使用了插入或忽略。
我想使用实体框架来受益于它的可管理性;我已经受够了为另一个稍微不同的查询编写样板代码,到目前为止,实体框架对查询的支持看起来很棒。
但是,我似乎真的找不到添加新事实的良好支持 - 显而易见的方法似乎是简单地在 .NET 中构造新实体,将它们添加到模型中,然后将更改保存到数据库中。但是,这意味着我需要提前检查特定行是否已经存在,因为如果确实存在,则不允许插入。在最好的情况下,这意味着额外的往返,但通常情况更糟:以前这段代码是高度并行的——偶尔的重复插入并不重要,因为数据库会忽略它——但现在我不仅需要检查是否事先存在一行,我需要以小得多的批次(由于事务开销通常会慢很多倍)这样做,因为并行插入中只有一个已经存在的行会导致整个事务的回滚。
那么,有谁知道如何使用实体框架获得类似的行为?
具体来说,我希望能够执行多次插入,并让数据库简单地忽略那些不可能的插入 - 或者更一般地说,能够表达服务器端冲突解决代码以避免不必要的往返和交易。
如果重要的话,我正在使用 SQLite。
【问题讨论】:
标签: sql entity-framework sqlite ado.net insert