首先将具有多个主键列的实体框架代码一一映射

本文关键字:实体 框架 代码 映射 一一 | 更新日期: 2023-09-27 18:05:19

我有2个表,2个主键列。它们的结构是:

public class X
{
    public int Id {get;set;}
    public int line {get;set;}
}
public class Y
{
    public int Id {get;set;}
    public int line {get;set;}
}

它们是一对一的关系。

我如何在实体框架代码映射2表首先反映他们的关系?

表Y是可选的,但表X是必需的。

首先将具有多个主键列的实体框架代码一一映射

如果我理解对了,也许这就是你要找的:

public class X
{
    [Key, ForeignKey("Y"), Column(Order=0)]
    public int ID { get; set; }
    [Key, ForeignKey("Y"), Column(Order=1)]
    public int line { get; set; }
    public virtual Y Y { get; set; }
}
public class Y
{
    [Key, Column(Order=0)]
    public int ID { get; set; }
    [Key, Column(Order=1)]
    public int line { get; set; }
    public virtual X X { get; set; }
}

对于Key属性,您说EF这些属性将是表的键。添加ForeignKey属性,为EF提供信息,告诉它哪个导航属性表示它作为外键的关系。最后,Column属性告诉EF X的哪个属性应该匹配Y上的哪个属性。如果我误解了你的问题,请告诉我,以便我修改我的答案。

public class X
{
    [Key]
    public int ID { get; set; }
    public int line {get; set;}
    public virtual Y Y { get; set; }
}
public class Y
{
    [Key]
    public int ID { get; set; }
    public int line {get; set;}
    public virtual X X { get; set; }
}

和添加配置,

modelBuilder.Entity<X>()
            .HasOptional<Y>(u => u.ID)
            .WithOptionalDependent(c => c.ID)
            .Map(p => p.MapKey("ID"));