我正在使用Entity Framework 5,目标是.Net 4.5。对于我的生活,我无法弄清楚在尝试使用Table Per Hierarchy和Navigation列时导致出现以下错误的错误:
列名'Game_Category'无效。
列名称“Game_Value”无效。
列名称“Type_Category”无效。
列名称“Type_Value”无效。
这是抽象基类(注意类别和值上的复合PK):
[Table("Dictionary")]
public abstract class Lookup
{
[Key, Column(Order = 0)]
[StringLength(50)]
public string Category { get; set; }
[StringLength(100)]
public string ExtendedValue { get; set; }
[Required]
public bool IsActive { get; set; }
[Required]
[StringLength(50)]
public string Key { get; set; }
[Key, Column(Order = 1)]
public int Value { get; set; }
}
后面跟着两个没有添加其他列的子类...
public class Game : Lookup {}
public class SetType : Lookup {}
这是具有Game和SetType的导航属性的类......
public class CardSet
{
[Required]
[StringLength(10)]
public string Abbreviation { get; set; }
public virtual Game Game { get; set; }
[Required]
public int GameId { get; set; }
[Key]
public int Id { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
public DateTime ReleaseDate { get; set; }
public virtual Lookup Type { get; set; }
[Required]
public int TypeId { get; set; }
}
从我的数据背景......
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Lookup>()
.Map<Game>(l => l.Requires("LookupType").HasValue("Game"))
.Map<SetType>(l => l.Requires("LookupType").HasValue("Set Type"));
base.OnModelCreating(modelBuilder);
}
查找表有一个名为LookupType的鉴别器列。我已经阅读了几个关于表/继承的教程。另外两个 - 使用类似构建对象的TPT和TPC很简单。虽然我理解上面的错误 - 它按照惯例寻找FK列,但我不明白我做错了什么或者错过了导致它找到那些列的错误。我已经尝试将ForeignKey属性放在GameId和TypeId属性上,但后来我得到了关于依赖/主要关系约束的错误,我不知道如何将该类别指定为附加外键。
我还没有找到关于表/继承的教程,因为我正在使用它们。任何帮助将不胜感激,这已经让我疯了一个多小时。
更新
我认为问题在于使用Category作为关键的一部分。 CardSet没有针对该查找的“游戏”类别的两个属性或该查找的“设置类型”类别。我尝试创建这些属性,但这不起作用。是否可以使用Fluent API设置它们?到目前为止,我已经做了十几次尝试而没有任何运气。
答案 0 :(得分:0)
我认为EF并不“喜欢”构造modelBuilder.Entity<Lookup>()
来映射这两个子类。这应该有所帮助:
modelBuilder.Entity<Game>()
.Map(l => l.Requires("LookupType").HasValue("Game"));
modelBuilder.Entity<SetType>()
.Map(l => l.Requires("LookupType").HasValue("Set Type"));