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表中。