2013-03-21 114 views
1

我有两个包含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是必需的。

谢谢先进。

+0

我总是想知道一对一表关系是什么点。如果这种关系是一对一的,为什么不能有一个表/类? – 2013-03-21 11:38:23

+1

@BenRobinson我总是怀疑起初它可能与安全问题有关。有些用户不允许或没有足够的权限查看其他表格上的某些细节,这就是为什么他们将其分开。 – 2013-03-21 11:42:09

回答

0
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")); 
+0

这些表与2个主键相关。我如何配置两者?在你的例子中,你只使用Id Key列。 – Shpongle 2013-03-21 12:30:17

1

如果我的理解没错,也许这是你在找什么:

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上的哪一个属性。如果我误解了你的问题,请让我知道,这样我就可以改变我的答案。

相关问题