2012-01-30 29 views
0

暴露我有一个连接表与相关的加入一个附加字段:实体框架代码优先映射组合键在连接表,其中的外键被模型

VirtualDatastreamId INT NOT NULL 
DatastreamId   INT NOT NULL 
FormulaElement  INT NOT NULL 

所有列是主键。这被映射到

的POCO是:

public class VirtualDatastreamMap 
{ 
    public virtual Datastream Datastream { get; set; } 
    public virtual VirtualDatastream VirtualDatastream { get; set; } 
    public virtual string FormulaElement { get; set; } 
} 

我没有在模型外键的属性,对我来说,一个外键的概念是一个实现细节,应该由封装由班级指定的关系。如果可能的话,我不想添加这些。

如何将此图与Fluent API进行映射?我希望这样的事情下面的(不幸的是不工作):

modelBuilder.Entity<VirtualDatastreamMap>() 
      .HasKey(vdm => 
       new 
       { 
        DatastreamId = vdm.Datastream.Id, 
        VirtualDatastreamId = vdm.VirtualDatastream.Id, 
        FormulaElement = vdm.FormulaElement 
       }); 

匿名类型的字段名必须被命名为对象不能有两个名称相同的字段。

我从this question看到这个问题是在答案中提出的,但似乎没有什么更进一步。

如果不可能,哪个更好?

  1. 添加外键属性到模型
  2. 一个Id字段添加到数据库和模型

由于

回答

1

复合主键的每一列都具有被映射到实体中的标量属性。您的理想解决方案将无法正常工

在选项2中,您还必须创建一个唯一的密钥并检查唯一的密钥违规。 EF没有内置对唯一密钥的支持。因此,我会选择选项1.

+0

满意。我创建了外键属性。这不是理想的,但它的工作原理。 – Daniel 2012-01-30 02:02:44