同一类型的多个对象集

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; }
}

但这感觉太糟糕了。

编辑:当然,另一个微不足道的方法是使用两种不同的单词类型,例如

class PossibleWord { ... } class 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
感谢您提到您最终使用的内容。 - u17
1个回答

7

可能你尝试在原始代码中表示两个不同的表格。我建议使用两个类,UsedWord和PossibleWord,并让它们都实现一个通用接口,例如IWord?或者更简单的方法是,在Word上只有一个布尔型“IsUsed”字段,以及一个表/类型。


哈哈,被忍者抢先了。不知怎么的,在我写下来之前,它看起来都不对。还需要等8分钟才能接受你的答案。非常感谢:] - user974608

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接