8

我尝试在 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 类型,例如

类可能词 { ... } 类 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; }
}
4

1 回答 1

7

大概您正在尝试在原始代码中表示 2 个不同的表。我会考虑两个类,UsedWord 和 PossibleWord,并让它们都实现一个通用接口,比如:IWord?或者更简单,只在 Word 上有一个布尔“IsUsed”字段和一个表/类型。

于 2012-08-11T10:59:04.107 回答