具有枚举值的EF5 Code First导航属性多属性映射

时间:2013-01-12 21:24:27

标签: c# ef-code-first entity-framework-5

鉴于以下模型:

public class Item
{
  public int Id { get; set; }
  public ICollection<File> Attachments { get; set; }
}

public class File
{
  public int Id { get; set; }
  public ObjectType ObjectType { get; set; } // enum stored as INT
  public int ObjectId { get; set; }
}

如何使用Fluent API描述Item.Attachments导航属性,以便生成的SQL正确连接,例如:

SELECT ... FROM Items a 
LEFT JOIN Files b
  ON a.Id = b.ObjectId AND b.ObjectType = 8 (example enum value)

我尝试公开Item.ObjectTypeItem.ObjectId属性,然后在我的项目地图中执行以下操作:

HasMany(x => x.Attachments)
  .WithOptional()
  .Map(x => x.MapKey("ObjectType", "ObjectId"))
  .WillCascadeOnDelete(false);

但是这会导致以下运行时错误,大概是因为这不是数据库中的实际外键。

  

指定的关联外键列'ObjectType,ObjectId'   无效。指定的列数必须与数量匹配   主键列

1 个答案:

答案 0 :(得分:0)

代码优先映射不支持此功能,因为ItemFile之间的关系不是有效的引用约束。 EF代码首先仅支持等同于外键约束的映射=&gt;从属表的外键中的列必须与主表的主键中的列匹配。您的情况需要依赖表中的其他常量列。