EF在Code First中已知密钥的多对多关系

时间:2016-09-08 14:08:23

标签: entity-framework ef-code-first

我试图从我的模型中的一个实体导航到另一个实体。但我似乎无法做到正确:

以下是我的实体:

public class Import
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    ...
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    ...
}

public class PersonParameter
{
    public int Id {get;set;}
    public int PersonId { get; set; }
    public int ImportId { get;set; }
    ...
    public virtual Person Person { get; set; }
    public virtual Import Import { get; set; }

}

public class ImportDetails
{
    public int Id { get; set; }
    public int PersonId { get; set; }
    public int ImportId { get; set; }
    ...
    public virtual Import Import { get; set; }
    public virtual Person Person { get; set; }

    public virtual PersonParameter PersonParameters { get; set; }

}

对于每次导入,一个人都有一组PersonParameters以及一些需要了解PersonParameters的ImportDetails。

现在EF认为这是一对多的关系,并在生成数据库时将ImportDetail_Id添加到表中。它不是。我希望EF能够使用已经存在的密钥。

基本上我喜欢EF为我创建这个SQL:

select * from importDetails d
left join PersonParameter pp on d.importId = pp.importid and d.PersonId = pp.PersonId

1 个答案:

答案 0 :(得分:0)

您也可以使用Map配置n-m关系 我不明白你的模型,但你的n-m配置应该类似于这个

modelBuilder.Entity<User>()
    .HasMany<Car>(user => user.OwnedCars)
    .WithMany(car => car.Owners)
    .Map(mapping =>
    {
        mapping.MapLeftKey("OwnerId");
        mapping.MapRightKey("CarId");
        mapping.ToTable("Owner_Car");
    });