多个相同类型的对象集

时间:2012-08-11 10:53:48

标签: c# entity-framework ef-code-first

我尝试在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; }
}

1 个答案:

答案 0 :(得分:7)

据推测,您试图在原始代码中表示2个不同的表。我会考虑两个类,UsedWord和PossibleWord,只是让它们都实现了一个通用接口,比如说:IWord?或者更简单,只需在Word上有一个bool“IsUsed”字段,以及一个表/类型。