我是Entity Framework的新手,我在纯t-sql中很容易遇到问题。假设我们有3列的表格。 ID(身份,主键),IdKind(int),Number(int)。列Nubmer取决于IdKind列。该表中的数据应如下所示:
ID | IdKind |数
1 | 1 | 1个
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1个
5 | 2 | 2
6 | 2 | 3
如您所见,列号自动递增取决于IdKind。在t-sql中,我为某些IdKind找到max(Number)+1。一切都在一个事务中的一个存储过程中,因此Number的值对于IdKind是唯一的。
如何在实体框架中完成相同的操作。创建新对象或更改IdKind时应计算Number的值。
最佳答案
我将为此使用数据库触发器,并在EF映射中使用Number
配置StoreGeneratedPattern.Computed
属性,以通知EF该属性已填充到数据库中,并且每次更新/插入后必须重新加载。
我也不会为每个新数字使用max()。相反,我将维护单独的表模拟序列。该表应包含每个序列的记录-在您的情况下,每个IdKind
的记录应具有当前的最大编号。您将选择单个记录并将其更新为包含新的最大数量,而不是选择聚合。使用此表必须与持久更改实体处于同一事务中。
关于entity-framework - Entity Framework 中的增量字段取决于另一个字段的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8309088/