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.ObjectTypeItem.ObjectId属性,然后在我的项目映射中做以下操作:

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

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

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

EF5代码优先导航属性多属性映射与枚举值

在代码优先映射中不支持这一点,因为您的ItemFile之间的关系不是有效的引用约束。EF代码首先只支持相当于外键约束的映射=>从属表的外键列必须匹配主表的主表的列。在从属表中需要额外的常量列