在实体框架中插入一个表中已经存在的FK值(相同的条目),而不更新另一个表的主键。

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

我最近问了一个与此相关的问题,并找到了一个解决方案,但意识到我可能有一个更大的问题。如果有谁能告诉我,如果我能够在不修改数据库的情况下做到我下面所描述的,那将是非常感激的。: 我是Entity Framework的新手。

我想在这个表中插入 (协议设置) 重复 SettingsId 新协议的价值(与一个新协议相关联)。agreementId 表中以列的形式说明)。)

然而,一个 SettingsId 也存储在一个表中,表中有以下几列 算法设置. Id一栏代表一个 SettingsId 并且是这个表的主键。

我只想更新 Agreement Settings 表(上面的旧表)与这些新的复制的 SettingsId 值,而不去管后一个表。 这样一来,我的协议就会有重复的 SettingsId 指南,但该指南只有一个唯一的表示,在该指南的 Algorithm Settings 表。

当我尝试使用Entity Framework插入到数据库中。

dataTransferAgreement = (await _dataTransferContext.Agreements
                        .AddAsync(dataTransferAgreement))
                        .Entity;

我得到了全新的指南 SettingsIds 返回,尽管对象 dataTransferAgreement 事先将重复的guids作为属性(它们被替换)。我认为这是因为Entity Framework将这些外键视为 Agreement Settings 桌及其与 Algorithm Settings 表(主键),并自动更新主键,从而自行更新相关的外键。

当然,我不能把 Algorithm Settings 表格属性 dataTransferAgreement,因为这样会引起主键冲突。

这个问题是否有办法将这些重复的外键值手动(或以其他方式)插入。Agreement Settings 桌子不碰 Algorithm Settings 表的实体属性(先写代码)?目前,插入主键Id的实体属性为 SettingsId 饰有 [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]在这个项目中的许多其他地方都使用了这个属性,所以我想我不能改变这个属性。

另外,在代码中关联这个表的实体属性。

[ForeignKey(nameof(SettingsId))]
public AlgorithmSetting AlgorithmSetting { get; set; }

在我的情况下是不需要的(因为我不想对它做任何事情),但我不能因为它是一个域模型就把它删除(再次强调,我是一个实体框架新手,所以如果我有任何错误,请纠正我)。

c# sql-server entity-framework ef-code-first relational-database
1个回答
0
投票

在你的协议设置表中,在你已经有的其他两列旁边添加一个主键 "id"。实体框架和关系型数据库是不会支持相同的主键的。

如果你将来需要查询协议表,你可以用任何列的值来查询,只需 "忽略 "你添加的新主键即可。

如果有需要,很高兴能进一步帮助你。

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