我尝试在EF5 RC中创建一个与此类似的数据上下文:
class WordContext : DbContext {
public DbSet<Word> PossibleWords { get; set; }
public DbSet<Word> UsedWords { get; set; }
}
当我尝试更新数据库时,我收到一个异常说:不支持每种类型的多个对象集。对象集'PossibleWords'和'UsedWords'都可以包含'TestProject.Word'类型的实例。
经过一些谷歌搜索后,似乎在EF中实际上不可能构建像这样的数据上下文。
我的问题是:存储这样的数据的代码优先设计是什么?
我想一个微不足道的可能是:
class WordContext : DbContext {
public DbSet<Words> Words { get; set; }
}
class Words {
public int ID { get; set; }
public IList<string> PossibleWords { get; set; }
public IList<string> UsedWords { get; set; }
}
但这只是感觉<强烈>可怕。
编辑:当然,另一个微不足道的就是使用2种不同的Word类型,比如
class PossibleWord {...} 班级BannedWord {...}
实际上,现在我把它写下来它甚至看起来都不那么糟糕,嗯......
EDIT2:
万一其他人也遇到了这个问题,我将在最后展示它是如何解决的:
class Word {
[Key]
public string String { get; set; }
}
class PossibleWord : Word { }
class UsedWord : Word { }
class WordContext : DbContext {
public DbSet<PossibleWord> PossibleWords { get; set; }
public DbSet<UsedWord> UsedWords { get; set; }
}
答案 0 :(得分:7)
据推测,您试图在原始代码中表示2个不同的表。我会考虑两个类,UsedWord和PossibleWord,只是让它们都实现了一个通用接口,比如说:IWord?或者更简单,只需在Word上有一个bool“IsUsed”字段,以及一个表/类型。