EF Core中HasRequired方法的替代方案是什么?
EF Core中替代EF6
HasRequired的方案 在EF Core里,原来EF6中的HasRequired方法已经被移除了,这就是你调用它会报错的原因。取而代之的是通过**HasOne/HasMany结合IsRequired**的方式来配置必需的实体关系,下面分两种常见场景说明:
1. 一对多关系配置
假设你有Order实体必须关联一个Customer(每个订单都得有对应的客户),在EF6中你可能会这么写:
modelBuilder.Entity<Order>().HasRequired(o => o.Customer).WithMany(c => c.Orders);
在EF Core里,对应的写法是:
modelBuilder.Entity<Order>() .HasOne(o => o.Customer) // 表示Order拥有一个Customer导航属性 .WithMany(c => c.Orders) // 表示Customer拥有多个Order的集合 .IsRequired(); // 标记该关系为必需,即Order不能没有Customer
2. 一对一关系配置
如果是一对一的必需关系,比如User必须关联一个UserProfile,EF6的写法可能是:
modelBuilder.Entity<User>().HasRequired(u => u.Profile).WithRequiredPrincipal(p => p.User);
EF Core中对应的配置:
modelBuilder.Entity<User>() .HasOne(u => u.Profile) .WithOne(p => p.User) .IsRequired();
另外,你也可以直接在实体的外键字段上使用[Required]数据注解来标记必需关系,比如:
public class Order { public int Id { get; set; } [Required] public int CustomerId { get; set; } public Customer Customer { get; set; } }
不过Fluent API的方式在处理复杂关系或需要集中配置的时候会更灵活可控。
内容的提问来源于stack exchange,提问作者user8520658
相关产品推荐
相关产品推荐

