EF Code First - Fluent API(WithRequiredDependent和WithRequiredPrincipal)

rid*_*nsb 8 entity-relationship fluent-interface ef-code-first

我有以下课程:

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Couple Couple { get; set; }
}

public class Couple
{
    public Guid Id { get; set; }
    public User Groom { get; set; }
    public User Bride { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

重点:

  1. BrideGroom属性是必需的
  2. 一对一的关系
  3. User课堂上,这是Couple必需的

OnModelCreating中的DbContext

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredPrincipal();
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent();
Run Code Online (Sandbox Code Playgroud)

但我不能被要求!

所有文件在数据库中都为null!

如何将数据库中的字段设为非空? 如果可能,使用API​​ Flient.

Ami*_*ria 5

它应该是这样的:

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent();
Run Code Online (Sandbox Code Playgroud)

WithRequiredDependent的工作原理:配置所需的关系:在关系的另一端没有导航属性.正在配置的实体类型将是依赖项,并包含主体的外键.关系所针对的实体类型将是关系中的主体.


含义:让我们在这里考虑你的第一行代码.它在正在配置的实体(用户)中创建一个外键,使其成为依赖并使关系的另一面(Couple) Principal


重要提示: 您认为您想要的配置是否会产生死锁?我没有测试上面的代码,但是这个配置似乎对我来说是一个僵局,所以我不确定EF是否允许你创建它.用户必须需要一对夫妇,夫妻必须需要相同的用户.