【问题标题】:Optional One-to-many Relationship in Entity Framework [closed]实体框架中的可选一对多关系[关闭]
【发布时间】:2015-06-01 02:20:12
【问题描述】:

我在让可选的一对多关系正常工作时遇到问题。

我的模型是:

public class Person
{
    public int Identifier { get; set; }
    ...
    public virtual Department Department { get; set; }
}

public class Department
{
    public int Identifier { get; set; }
    ...
    public virtual IList<Person> Members { get; set; }
}

我想将零或一个Department 分配给Person。分配后,Person 应显示在DepartmentMembers 列表中。

我正在使用 Fluent API 配置 Person,如下所示:

HasKey(p => p.Identifier);
HasOptional(p => p.Department).WithMany(d => d.Members);

还通过配置Department而不是Person尝试了另一种方式:

HasMany(d => d.Members).WithOptional(p => p.Department);

但是两种方式我都得到了例外:

无法确定类型“Person”和“Department”之间关联的主体端。此关联的主体端必须使用关系流式 API 或数据注释显式配置。

当同时配置两者时,我得到:

在类型“Person”上声明的导航属性“Department”已配置有冲突的多重性。

对另一种实体类型使用与 Person 相同的配置有效,但是该实体类型引用自身。

如何正确配置这种关系?

【问题讨论】:

  • 没关系,我从模型中删除了ForeignKeyIndexConvention。再次添加后,它起作用了。

标签: c# entity-framework entity-framework-6 ef-fluent-api


【解决方案1】:

你可以试试这个:

this.HasOptional(s => s.Department)
    .WithMany(s => s.Members)
    .HasForeignKey(s => s.MemberOfDepartment);

【讨论】:

    【解决方案2】:
    modelBuilder.Entity<Department>().HasMany(x => x.MemberOfDepartment).WithOptional();
    

    【讨论】:

      【解决方案3】:

      也试试这个:

      public class Person
      {
          public int Identifier { get; set; }
          public int DepartmentIdentifier {get; set;}
          public virtual Department Department { get; set; }
      }
      
      public class Department
      {
          public int Identifier { get; set; }
      
          public virtual IList<Person> Members { get; set; }
      }
      

      使用 Fluent API 配置 EF Person:

      this.HasRequired(p => p.Department).WithMany(d => d.Members).HasForeignKey(p => 
      p.DepartmentIdentifier);
      
      this.Property(p => p.DepartmentIdentifier).IsRequired();
      

      【讨论】:

      • 它说 我想将零或一个 Department 分配给 Person
      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2011-12-17
      • 1970-01-01
      相关资源
      最近更新 更多