【发布时间】:2019-05-22 22:03:32
【问题描述】:
我在 EF 中有一个类似的模型
Person
PK Guid Id
PK DateTime DateSynced
Test
PK Guid Id
FK Guid PersonId
在 Entity Framework 6.2 中,我真的只关心 Person 上的 Navigation 属性,它引用了一组测试。我不需要 Test.Persons 的属性或类似的东西。
我真的只想让 Person.Tests 的 Test.PersonId = Id 与 DateSynced 无关。最终会有很多人拥有相同的 Id,每个人都有不同的 DateSynced DateTime。
这是可行的还是我需要一个带有中间表的多对多?
我知道 EFCore 有一个备用键的概念,我想我可以在这项工作中利用它,但 EF 6.2 中似乎没有相应的功能
编辑
我的 OnModelCreating 覆盖中有以下 Fluent 规则。
modelBuilder.Entity<Test>()
.HasRequired(t => t.Person)
.WithMany(p => p.Tests)
.HasForeignKey(t => t.PersonId);
我收到以下异常,抱怨 Dependent 和 Principal 角色约束:
The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical.
据我了解,这是因为我仅通过该键的一部分来引用具有 2 部分复合键的实体。我正在寻找的是一种方法来做到这一点。
【问题讨论】:
-
这是非常标准的东西。你到底有什么问题?什么不工作?也许分享一些你尝试过的代码。
-
@Ben 我已经用其他上下文更新了我的答案。我要做的是与仅使用该键的一部分的复合键实体建立关系。
-
哦,
DateSynced是您主键的一部分。那是……一种不寻常的方式。我不确定处理此问题的“正确”方法是什么,但我不会定义关系,而是手动处理您在我的代码中所追求的连接(即,只需编写在PersonId上连接的 LINQ。 . -
一个 SQL FK 约束(实际上不是关系,而是关于数据库的事实)表示某些列的子行值出现在它们是 PK/UNIQUE 的其他地方。在引用的表中,它们必须声明为 PK/UNIQUE。列与引用表中的约束有什么关系并不重要。 (我们说 FK 是从引用表和列到被引用的。如果引用的列不是 PK/UNIQUE,那么您没有 FK 和 SQL 无法声明性约束的情况。
-
请use text, not images/links, for text--including tables & ERDs. 解释或引用其他文本。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图像中包含图例/键和说明。让您的帖子自成一体。
标签: entity-framework entity-framework-6 foreign-keys relationship one-to-many