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表的对象]。