我有一些联合表混乱

时间:2011-06-20 16:26:39

标签: c# entity-framework code-first

所以我正在研究一些实体框架代码。我对数据库关系映射很新。我已经为我的问题创建了一个通用示例,我将在下面发布代码。

该场景是一个简单的论坛调查。用户可以通过选择选项(或者可能是多个轮询选项)对投票进行投票。

民意调查与期权有一对多的关系。 选项和用户具有多对多关系。 民意调查与用户有多对多的关系。

但是,Poll所拥有的用户基本上将从选项所拥有的用户进行编译,因为对选项进行投票,您必须对投票进行投票,反之亦然。所以基本上我猜它可以被描述为一个用户/选项连接表,其中添加了选项'民意调查'主键。或者它可能有点像User / Poll连接表,其中Option是一个复杂类型或其他类型的数组。

无论如何,我一直在使用Fluent API(DbModelBuilder),但我还没有得到类似我想要的东西。帮助

Poll.cs

public class Poll
{
  public long ID { get; private set; }
  public ICollection<Option> Options { get; set; }
  public ICollection<User> Users { get; set; }
}

Option.cs

public class Option
{
  public long ID { get; private set; }
  public long PollID { get; set; }
  public ICollection<User> Users { get; set; }
}

User.cs

public class User    {
  public long ID { get; private set; }
  public ICollection<Option> Polls { get; set; }
  public ICollection<User> Options { get; set; }
{

1 个答案:

答案 0 :(得分:2)

为什么需要PollUser之间的联系?这是多余的信息 - 您始终可以通过Options查询来获取该数据。如果你真的希望它引入名为Vote的实体,它将保留PollIdUserIdOptionId。您的应用程序逻辑必须确保使用OptionIdPollId的有效组合。另一种解决方法是在Option中创建由OptionIdPollId组成的复合键。然后,您将在UserOption之间创建多对多关系。它将部分解决用户对Poll依赖的需求,并将完全消除检查有效OptionIdPollId对的问题。