EF5代码优先导航属性多属性映射与枚举值
本文关键字:属性 映射 枚举 EF5 导航 代码 | 更新日期: 2023-09-27 17:52:48
给定以下模型:
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'是无效的。指定的列数必须与主键列
在代码优先映射中不支持这一点,因为您的Item
和File
之间的关系不是有效的引用约束。EF代码首先只支持相当于外键约束的映射=>从属表的外键列必须匹配主表的主表的列。在从属表中需要额外的常量列