我尝试在 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 类型,例如
类 PossibleWord { ... } 类 BannedWord { ... }
实际上,既然我把它写下来了,它看起来甚至没有那么糟糕,嗯......
编辑2:
以防万一其他人也遇到这个问题,我将展示它最终是如何解决的:
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; }
}
最佳答案
大概您正在尝试在原始代码中表示 2 个不同的表。我会考虑两个类,UsedWord 和 PossibleWord,让它们都实现一个公共(public)接口(interface),例如:IWord?或者更简单,只需在 Word 上有一个 bool 型“IsUsed”字段和一个表/类型。
关于c# - 同一类型的多个对象集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914052/