C# 在另一个表中创建新行时更新表

C# 在另一个表中创建新行时更新表,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有这两张桌子。 我正在尝试在Account表中添加新行,然后使用以下命令更新Client表中的AccountId: public static void AddAccount () { var db = new DALEntities(); Account account = new Account(); db.Account.Add(account); db.SaveChanges(); var newid = account.AccountId; if (MyS

我有这两张桌子。

我正在尝试在Account表中添加新行,然后使用以下命令更新Client表中的AccountId:

public static void AddAccount ()
{
  var db = new DALEntities();
  Account account = new Account();

  db.Account.Add(account);
  db.SaveChanges();
  var newid = account.AccountId;
  if (MySession.Current._ClientId != null)
  {
      Client client = GetClientByID((int) MySession.Current._ClientId);
      client.AccountId = newid;

      db.SaveChanges();
  }
}
我使用以下方法获取客户端:

public static Client GetClientByID (int id)
{
    var db = new DALEntities();
    return db.Client.SingleOrDefault(d => d.ClientID == id);
}
新行被添加到Account表中,它返回正确的新条目AccountId和正确的客户端对象;但是,它不会更新客户机表。我试着用

  db.Entry(client).State = EntityState.Modified;
但我犯了这个错误:

an entity object cannot be referenced by multiple instances of ientitychangetracker

如何在保存客户机模型之前更新它

我看到您正在这个上下文中实例化一个新的DbContext:

public static Client GetClientByID (int id)
{
    var db = new DALEntities();
    return db.Client.SingleOrDefault(d => d.ClientID == id);
}
为了使其正常工作,您必须确保从同一上下文中获取这两个实例

实际上,您必须使“db”成为类级字段。或者,为了简单起见并证明其有效,您可以进行以下更改:

public static void AddAccount ()
{
  var db = new DALEntities();
  Account account = new Account();

  db.Account.Add(account);
  db.SaveChanges();
  var newid = account.AccountId;
  if (MySession.Current._ClientId != null)
  {
      Client client =  db.Client.SingleOrDefault(d => d.ClientID == id);
      client.AccountId = newid;

      db.SaveChanges();
  }
}
请注意,不再实例化Dalenties。这样,它将使用相同的更改跟踪器


希望这有帮助。

您的数据库结构没有太多意义。这意味着一个帐户可以属于多个客户端,但每个客户端只能有一个帐户。
GetClientByID
到底是如何工作的?如果它使用不同的数据库上下文检索
客户机
,它将不起作用。您有一个交叉引用错误。这两个表都通过Account.Accountid->Client.Accountid和Client.ClientId->Account.ClientId相互引用,所以当您保存多个实例时,会发生错误,我明白您的意思,对于应用程序的其他部分,我需要两个表中的Accountid和ClientId。accountId属于一个客户端,并且该客户端只能有一个帐户(用于回答第一条注释)。谢谢大家的评论。我从Account表中删除了ClientId,但仍然没有将AccountId保存到Client表中。