entity-framework - Entity Framework 代码优先最小基数

标签 entity-framework ef-code-first

假设我有以下实体类:

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/

相关文章:

c# - Azure 上日期解析的意外行为

entity-framework - EF Core 多对多关系表命名

c# - 如何更新 Entity Framework 中的相关实体

mysql - 我可以使用导航属性加载一个包含表的整个数据库吗?

c# - 删除自引用类的对象时出现 DbUpdateException

c# - Entity Framework 代码优先外键问题

asp.net-mvc - MVC/代码优先 : how to add more tables to the same db context?

c# - 使用数据注释创建外键

asp.net-mvc-3 - 如何使用 EF-Code-First 将大型表分成多个离散类型

c# - Entity Framework 代码优先 : CASCADE DELETE for same table many-to-many relationship