鉴于以下模型:
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.ObjectType
和Item.ObjectId
属性,然后在我的项目地图中执行以下操作:
HasMany(x => x.Attachments)
.WithOptional()
.Map(x => x.MapKey("ObjectType", "ObjectId"))
.WillCascadeOnDelete(false);
但是这会导致以下运行时错误,大概是因为这不是数据库中的实际外键。
指定的关联外键列'ObjectType,ObjectId' 无效。指定的列数必须与数量匹配 主键列
答案 0 :(得分:0)
代码优先映射不支持此功能,因为Item
和File
之间的关系不是有效的引用约束。 EF代码首先仅支持等同于外键约束的映射=&gt;从属表的外键中的列必须与主表的主键中的列匹配。您的情况需要依赖表中的其他常量列。