gpt4 book ai didi

c# - 更新操作 - 由于对象的当前状态,操作无效

转载 作者:太空狗 更新时间:2023-10-29 19:52:23 25 4
gpt4 key购买 nike

我有两个通过外键引用链接的表,我们称它们为 RX 和程序。我有这种尝试更改 RX 表中程序 ID 的方法,它是程序表中程序 ID 字段的 FKR。每当我尝试这样做时,我都会得到一个

"Operation is not valid due to the current state of the object"

哪个被触发:

System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();我在这里做错了什么?

违规代码段和数据库字段定义如下。代码:

    public void ChangeProgram(int programId, DbDataContext dc)
{
//var programId = ddlPrograms.SelectedValue.ToInteger(0);
if (programId > 0)
{
var referral = PrescriptionManager.GetReferral(dc, _view.RxID);
if (referral != null && referral.AspnRx.ProgramID != programId)
{
try
{
referral.ProgramID = dc.PROGRAMs.Single(p => p.ProgramID == programId).ToString().ToInteger(1);
}
catch (ForeignKeyReferenceAlreadyHasValueException exception)
{
_view.ChangeProgramSuccess = false;
}

数据库字段定义:

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProgramID", DbType="Int")]
public System.Nullable<int> ProgramID
{
get
{
return this._ProgramID;
}
set
{
if ((this._ProgramID != value))
{
if (this._PROGRAM.HasLoadedOrAssignedValue)
{
throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
}
this.OnProgramIDChanging(value);
this.SendPropertyChanging();
this._ProgramID = value;
this.SendPropertyChanged("ProgramID");
this.OnProgramIDChanged();
}
}
}

最佳答案

这是一个 LinqToSql 的东西,你正在做的事情在 EF 和可能的其他 ORM 中都可以正常工作。您必须将表示对象的属性设置为新对象,而不是仅仅更新映射到数据库中外键字段的属性。

假设您有一个名为 Program 的属性,然后改为这样做:

referral.Program = dc.PROGRAMs.Single(p => p.ProgramID == programId);

没有真正相关,但 .ToString().ToInteger(1),看起来有点可疑,看起来您正在获取一个整数,将其转换为字符串,然后再转换回整数。

关于c# - 更新操作 - 由于对象的当前状态,操作无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507367/

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