I';I’我对联接表有点困惑

本文关键字: | 更新日期: 2023-09-27 18:00:00

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

这个场景是一个简单的论坛投票。用户可以通过选择一个选项(或多个投票选项)对投票进行投票。

Poll和Option有一对多的关系。Option和User具有多对多的关系。Poll和User之间存在多对多的关系。

但民意调查的用户基本上是根据选项的用户编制的,因为要对某个选项进行投票,你必须对民意调查进行投票,反之亦然。所以基本上,我想它可以被描述为一个附加了Options‘Polls’主键的User/Options联接表。或者它可以有点像一个带有Option的复杂类型数组的User/Opoll联接表。

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

轮询.cs

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

选项.cs

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

用户.cs

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

I';I’我对联接表有点困惑

为什么需要PollUser之间的连接?这是多余的信息——您总是可以通过Options查询来获得这些数据。如果你真的想让它引入第四个名为Vote的实体,它将保留PollIdUserIdOptionId。您的应用程序逻辑必须确保使用OptionIdPollId的有效组合。解决这一问题的另一种方法是在由OptionIdPollId组成的Option中创建复合密钥。然后您将在UserOption之间创建多对多关系。它将部分解决用户对轮询依赖性的需求,并完全消除检查OptionIdPollId的有效对的问题。

相关文章:
  • 没有找到相关文章