微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF6 Code First 多对多关系问题

如何解决EF6 Code First 多对多关系问题

我正在尝试创建一个带有额外列的多对多关系表。所以有下面的场景,只是一个例子来说明。一个人可以属于很多公司,公司可以有很多人。

public class Person
{
    public Person()
    {
        PersonsCompanies = new HashSet<PersonCompany>();
    }
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<PersonCompany> PersonsCompanies { get; set; }
}


public class PersonMap : EntityTypeConfiguration<Person>
{
    public PersonMap()
    {
        Property(p => p.FirstName)
            .HasMaxLength(30)
            .Isrequired();
            
        Property(p => p.LastName).HasMaxLength(30);           
       
        HasMany(p => p.PersonsCompanies)
           .Withrequired()
           .HasForeignKey(pc => pc.PersonId);

    }
}

public class Company
{
    public int CompanyId { get; set; }
    public string Name { get; set; }
    public Company()
    {
        PersonsCompanies = new HashSet<PersonCompany>();
    }
    public virtual ICollection<PersonCompany> PersonsCompanies { get; set; }

}

public class CompanyMap : EntityTypeConfiguration<Company>
{
    public CompanyMap()
    {
        HasMany(c => c.PersonsCompanies)
           .Withrequired()
           .HasForeignKey(pc => pc.Companyid);
    }        
}

public class PersonCompany
{
    public int PersonId { get; set; }
    public int Companyid { get; set; }
    public DateTime? HireDate { get; set; }

    public virtual ICollection<Person> Persons { get; set; }
    public virtual ICollection<Company> Companies { get; set; }
}

public class PersonCompanyMap : EntityTypeConfiguration<PersonCompany>
{
   public PersonCompanyMap()
    {
        HasKey(pc => new { pc.CompanyId,pc.PersonId });
    }
}

表 Person 和 Company 似乎各有 2 个额外的列 - [PersonCompany_CompanyId] [int] NULL, [PersonCompany_PersonId] [int] NULL,

似乎是什么问题?

另外,如何填充条目?我有

var person = new Person { FirstName = "John",LastName = "Doe"};
person.PersonsCompanies.Add(new PersonCompany { CompanyId = 1,HireDate 
 = DateTime.Now });
 context.Persons.Add(person);

谢谢,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。