gpt4 book ai didi

c# - EF Core 2 - 只有 1 个导航属性/关系知识的关系?

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:26 25 4
gpt4 key购买 nike

我正在将 ASP.NET Core 2.2 与 EF Core 2.2 和 SQL 服务器一起使用。

我目前正在开发一项功能,其中包含以下类:

TABLE Foo
-------------------------------------------------------------
Column Type Remark
--------------------------------------------------------------
Id GUID PK
IntroId GUID? Nullable FK
IntroText Content Navigation Property
--------------------------------------------------------------

TABLE Content
--------------------------------------------------------------
Column Type Remark
--------------------------------------------------------------
Id GUID PK
Text string
--------------------------------------------------------------

这是与我的问题相关的 Fluent API 配置:

builder.HasOne(b => b.IntroText)
.WithOne()
.IsRequired(false);

内容
内容只有自己的配置。

内容可以包含很多文本,由于某些原因,这些东西没有直接保存在 Foo 表/类中。

如您所见,我试图确保 Content 没有指向 Foo 的外键/导航属性。这是因为这些属性不是 Content 的一部分,并且因为在未来更多的类/表可以包含保存在 Content< 中的类似 IntroText 的内容 表,我不希望 Content 充满可为空的外键/导航属性。

这在 EF Core 中可行吗?

我现在得到的错误:

无法确定“Foo.IntroText”和“Content”之间的一对一关系的子/从属方。要识别关系的子/依赖方,请配置外键属性。如果这些导航不应属于同一关系的一部分,请在不指定反向的情况下配置它们。参见 http://go.microsoft.com/fwlink/?LinkId=724062了解更多详情。


我会接受允许数据库具有我在代码库中看不到的关系的答案,但我更希望 ContentFoo 一无所知>

非常感谢您的帮助!

最佳答案

如果您在 Foo 实体中公开了一个 IntroTextId,那么您需要将其关联为一对一关系中的 FK:

builder.HasOne(b => b.IntroText)
.WithOne()
.HasForeignKey(b => b.IntroTextId)
.IsRequired(false);

通常我不希望 FK 属性在我的实体中公开,因为这会导致引用实体的两个真实来源。 (Foo.IntroTextId 与 Foo.IntroText.IntroTextId)在这种情况下,您利用 FK 的阴影属性:

builder.HasOne(b => b.IntroText)
.WithOne()
.HasForeignKey("IntroTextId")
.IsRequired(false);

这类似于(并且更直观)在 EF 6 中使用 Map(MapKey) 在不公开属性的情况下映射 FK。

.Map(x => x.MapKey("IntroTextId"));

关于c# - EF Core 2 - 只有 1 个导航属性/关系知识的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56171197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com