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



我最近问了一个与此相关的问题,并找到了解决方案,但意识到我可能有更大的问题。如果有人能告诉我,如果我能够在不更改数据库的情况下完成以下描述,我将不胜感激注意:我是实体框架的新手。

我正试图在此表(协议设置(中插入新协议的重复SettingsId值(与表中显示为列的agreementId关联(。

然而,SettingsId也存储在具有这些列"算法设置"的表中。Id列表示SettingsId,是该表的主键。

我只想用这些新的重复SettingsId值更新Agreement Settings表(上面的前一个表(,并保留后一个表。这样,我将拥有具有重复SettingsIdguid但在Algorithm Settings表中该guid只有一个唯一表示形式的协议。

当我尝试使用实体框架插入数据库时:

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

我得到了返回的SettingsIds的全新guid,尽管对象dataTransferAgreement事先有重复的guid作为属性(它们被替换了(。我认为这是因为实体框架在Agreement Settings表中看到了这些外键及其与Algorithm Settings表(主键(的关联,并自动更新主键,从而自行更新关联的外键。

当然,我不能将Algorithm Settings表属性添加到dataTransferAgreement中,因为这会导致主键冲突。

问题:是否有任何方法可以手动(或以其他方式(将这些重复的外键值插入到Agreement Settings表中,而不必接触实体框架中的Algorithm Settings表(代码优先(?目前,插入SettingsId主键Id的实体属性是用[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]装饰的,该属性在该项目的许多其他地方都有使用,所以我认为我无法更改这一点。

此外,在代码中关联此表的实体属性:

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

在我的情况下是不需要的(因为我不想对它做任何事情(,但我不能只是删除它,因为它是一个域模型(同样,我是一个实体框架新手,所以如果我在任何方面都错了,请纠正我(。

在协议设置表中,添加一个主键"id",以及其他两列。实体框架和关系数据库将不支持相同的主键。

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

如果需要,很乐意提供进一步的帮助。

最新更新