假设我有以下实体类:
public class Order
{
public int OrderID { get; set; }
public ICollection<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
public int OrderLineID { get; set; }
public Order Order { get; set; }
}
我想为这个关系强制执行最小基数 1;即我想确保在没有至少 1 个 OrderLine 的情况下无法创建订单。
我正在使用 EF code first fluent 样式配置,我能够强制执行 OrderLine 必须具有 Order 引用(使用 HasRequired() 扩展方法)的事实,但我看不到如何防止在没有 Order 的情况下创建 Order至少一个 OrderLine。
最佳答案
简而言之:你不能。您的需求无法映射到数据库约束:订单和订单行是分开保存的,因此当您创建订单并添加订单行时,必须先保存订单或订单行。订单行 -> 订单关系由外键支持,因此必须先保存订单。保存订单后,据数据库所知,该订单没有订单行,直到稍后才添加。
您可以创建自定义验证函数并在保存前调用它们。如果您使用的是 ObjectContext
,则必须自己执行此操作。如果你有一个 DbContext
,你应该能够覆盖 DbContext.ValidateEntity
.出于显而易见的原因,这仅在您通过上下文进行所有数据库修改时才有效。如果您直接修改数据库表,则不会使用自定义验证函数。
关于entity-framework - Entity Framework 代码优先最小基数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021039/