所以我正在研究一些实体框架代码。我对数据库关系映射很新。我已经为我的问题创建了一个通用示例,我将在下面发布代码。
该场景是一个简单的论坛调查。用户可以通过选择选项(或者可能是多个轮询选项)对投票进行投票。
民意调查与期权有一对多的关系。 选项和用户具有多对多关系。 民意调查与用户有多对多的关系。
但是,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; }
{
答案 0 :(得分:2)
为什么需要Poll
和User
之间的联系?这是多余的信息 - 您始终可以通过Options
查询来获取该数据。如果你真的希望它引入名为Vote
的实体,它将保留PollId
,UserId
和OptionId
。您的应用程序逻辑必须确保使用OptionId
和PollId
的有效组合。另一种解决方法是在Option
中创建由OptionId
和PollId
组成的复合键。然后,您将在User
和Option
之间创建多对多关系。它将部分解决用户对Poll依赖的需求,并将完全消除检查有效OptionId
和PollId
对的问题。