[英]UPDATE operation - Operation is not valid due to the current state of the object
我有两个表通过外键引用链接,让我们称它们为RX和程序。 我有这个方法试图改变RX表中的程序ID,这是程序表中程序ID字段的FKR。 每当我尝试这样做时,我都会得到一个
“由于对象的当前状态,操作无效”
被解雇了:
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),看起来有点可疑,看起来你正在取一个整数,将其转换为字符串然后再转换为整数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.