我有一个连接表,其中包含与连接相关的附加字段:
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看到答案中提出了这个问题,但似乎没有任何进展。
如果不可能,这是一个更好的选择吗?
Id
字段添加到数据库和模型由于
答案 0 :(得分:1)
复合主键的每一列都必须映射到实体中的标量属性。您理想的解决方案将无效。
在选项2中,您还必须创建一个唯一的密钥并检查唯一的密钥违规。 EF没有内置支持唯一键。因此我会选择选项1。