我最近问了一个与此相关的问题并找到了解决方案,但意识到我可能有一个更大的问题。如果有人可以告诉我是否能够在不更改数据库的情况下执行我在下面描述的操作,将不胜感激!注意:我是实体框架的新手。
我正在尝试在此表(协议设置)中插入新协议的重复SettingsId值(与agreementId表中显示为列的协议相关联)。
但是, aSettingsId也存储在具有这些列Algorithm Settings的表中。Id 列代表一个SettingsId并且是该表的主键。
我只想Agreement Settings用这些新的重复值更新表(上面的前表),SettingsId而不要管后一个表。这样,我将拥有具有重复SettingsIdguid 但表中只有该 guid 的一个唯一表示的协议Algorithm Settings。
当我尝试使用实体框架插入数据库时:
dataTransferAgreement = (await _dataTransferContext.Agreements
.AddAsync(dataTransferAgreement))
.Entity;
我得到了返回的全新 guid SettingsIds,尽管该对象dataTransferAgreement事先具有重复的 guid 作为属性(它们已被替换)。我认为这是因为实体框架在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; }
在我的情况下不需要(因为我不想用它做任何事情),但由于它是域模型,我不能只删除它(再次,我是实体框架新手,所以如果我是有任何错误请纠正我)。