c# - 同一类型的多个对象集

标签 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 类型,例如

类 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/

相关文章:

C# 赋予控件数组属性

javascript - 来自 MVC.Grid 的模态视图(部分)

entity-framework - 无法通过将对象数据源拖动到 WinForm 来创建 Gridview

c# - 如何在 Entity Framework 查询中使用左连接?

c# - 导航属性为空

c# - 使用默认约定与可选依赖端的一对一关系

c# - 多线程访问.net中的集合

c# - 压缩一个简短但重复的字符串

c# - 在 Web API、 Entity Framework 中使用 n 层体系结构时,数据访问层中的上下文为空

ef-code-first - 如何使用Entity Framework代码优先自定义外键列名称