C# 更新外键时发生Linq到SQL错误
我是一个试图更新外键的初学者,但它显示了这个错误 无法将类型“C# 更新外键时发生Linq到SQL错误,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我是一个试图更新外键的初学者,但它显示了这个错误 无法将类型“DynaDNS.DAO.GroupDetail”隐式转换为 “long” 霍斯代尔酒店 GroupId-用于Groupdetails的FK 霍斯特恩希德酒店 群组详细信息 GroupId-PK public bool UpdateHostDns(HostDNSDetail HostObj) { DynaDBDataContext ctx = GetDataContext(); var ExistingDns = (from Hos
DynaDNS.DAO.GroupDetail
”隐式转换为
“long
”
霍斯代尔酒店
GroupId-用于Groupdetails的FK
霍斯特恩希德酒店
群组详细信息
GroupId-PK
public bool UpdateHostDns(HostDNSDetail HostObj)
{
DynaDBDataContext ctx = GetDataContext();
var ExistingDns = (from HostDNS in ctx.HostDNSDetails
where (HostDNS.HostDNSId) == (HostObj.HostDNSId)
select HostDNS).FirstOrDefault();
if (ExistingDns != null)
{
ExistingDns.GroupId = ctx.GroupDetails.Single(Existing =>Existing.GroupId == HostObj.GroupId);
// i m trying to update from the value from "HostObj.GroupId".
}
}
您正试图使用
GroupDetails.Single
选择整个对象。因此,不是:
ExistingDns.GroupId = ctx.GroupDetails.Single(Existing =>Existing.GroupId == HostObj.GroupId);
您需要执行以下操作:
long ExistingDnsId = (from c in ctx.GroupDetails
where c.GroupId == HostObj.GroupId
select c.GroupId).SingleOrDefault();
感谢您的回复,但它仍然会抛出相同的错误“System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException:由于对象的当前状态,操作无效。”哦,我知道您在这里试图做什么了…如果您试图设置ExistingDns.GroupId,请改为尝试:ExistingDns=ctx.GroupDetails.Single(Existing=>Existing.GroupId==HostObj.GroupId);您应该设置association属性而不是外键。我找到了它,我必须将它设置为GroupDetails的对象,我的意思是ExistingDns.GroupDetails=ctx.GroupDetails.SingleOrDefault(c=>c.GroupId==HostObj.GroupId);//其中GroupDetail现有DNS中存在的[GroupDetail表的对象]。