Entity Framework Core 7 外键

问题描述 投票:0回答:1

我的实体中有一个外键“string ParamName”,它指的是 ParamDesc 实体。我怎样才能使这个外键不严格?我的意思是,我希望我的外键可以包含任何值,即使不引用任何 ParamDesc 实体。预先感谢您。

我已经尝试过:

modelBuilder
                .Entity<ParamInfo>()
                .HasOne(pi => pi.ParamDesc)
                .WithMany(e => e.ParamInfos)
                .HasForeignKey(pi => pi.ParamName)
                .IsRequired(false)
                .OnDelete(DeleteBehavior.NoAction);

我仍然无法添加具有未知 ParamName 的 ParamInfo,但我想这样做。

c# entity-framework-core
1个回答
2
投票

我的意思是,我希望我的外键可以包含任何值,即使不引用任何 ParamDesc 实体

那么它就不是外键,也不应该是外键。这不是严格的 EF Core 规则,而是关系数据库中外键的定义:

来自 SQL Server 文档

外键(FK)是一列或列的组合,用于建立和强制两个表中的数据之间的链接,以控制可以存储在外键表中的数据。

维基

外键是一个表中引用另一个表的主键的一组属性。外键链接这两个表。另一种说法是:在关系数据库的上下文中,外键是一组受某种包含依赖约束约束的属性,特别是由一个关系 R 中的外键属性组成的元组必须也存在于其他一些(不一定是不同的)关系 S 中,而且这些属性也必须是 S 中的候选键

因此它们用于参考一致性,而您的专栏则不是。要么将其分成两部分,一个用于可选的 FK(具有可选关系),一个用于其余数据,或者添加另一列,该列将确定第一列中存储的数据类型,并基于此使用“手动”连接(我建议遵循第一种方法)。

© www.soinside.com 2019 - 2024. All rights reserved.