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