我正在研究一个简单的数据库,具体来说,这是数据库优先方法(Visual Studio 2017社区,实体框架6.2)生成的模型: 生成的数据库模型
我希望 UserMessage 表能够使用名为 AnswerId 的字段指向自身,这是一个引用其主键的可为空的外键。同样,具体来说,这是我创建表的部分: 用户消息表脚本
我的问题是,当实体框架基于现有数据库生成类时,除了这个特定的表之外,一切都很好,EF 建议(我不知道为什么)UserMessage 表本身的多重性为 0..1 - *,而它应该 1 - 0..1(因为消息可能有直接答案,但不超过 1, 虽然这个消息,也就是答案,也可以有一个答案,所以它就像一个链表)。 下面是生成的类:用户消息生成的类
总结一下整个事情:我想知道为什么实体框架以它的方式生成我的类,以及如何让它生成它,以便我只有一个指向答案的虚拟属性(如果它有一个),而不是集合。
感谢您的回答!
我认为你所看到的是EntityFramework的正确解释。 UserMessage1 表示引用父级作为其答案的所有用户消息的集合。我知道您可能不会将该集合用于任何事情,但它在那里并没有错。 UserMessage2 似乎是您要查找的属性。 也许您可以在关系图中重命名这些属性,这样它们就不会混淆。
用户消息1 = 引用我的消息
用户消息2 = 我可能引用或不引用的消息
我不明白如何阻止 EF 生成此集合。我认为如果您删除图表中的属性,您每次更新图表时都必须将其删除。
也许尝试删除模型中的第二个用户消息导航属性。