2014-12-26 3 views
0

나는이 두 테이블을 가지고 있습니다.
enter image description here다른 테이블에 새 행을 만들 때 테이블 업데이트

나는 다음 계정 테이블에 새 행을 추가 한 다음 사용하여 클라이언트 테이블에 계정 아이디를 업데이트하려고 :

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(); 
    } 
} 

I하여 클라이언트를 얻으려면 다음을 사용

public static Client GetClientByID (int id) 
{ 
    var db = new DALEntities(); 
    return db.Client.SingleOrDefault(d => d.ClientID == id); 
} 

새 행이 Account 테이블에 추가되고 올바른 새 항목 AccountId와 올바른 Client 개체를 반환합니다. 그러나 Client 테이블은 갱신하지 않습니다. 나는

db.Entry(client).State = EntityState.Modified; 

을 사용하려고하지만이 오류가있어 : 나는 그것을 저장하기 전에 클라이언트 모델을 업데이트 할 수있는 방법

an entity object cannot be referenced by multiple instances of ientitychangetracker 

합니다.

public static Client GetClientByID (int id) 
{ 
    var db = new DALEntities(); 
    return db.Client.SingleOrDefault(d => d.ClientID == id); 
} 

당신이 같은 맥락에서 두 개의 인스턴스를 받고 있는지 확인해야 작동하기 위해서는 :

+1

데이터베이스 구조가별로 의미가 없습니다. 이는 계정이 둘 이상의 클라이언트에 속할 수 있지만 각 클라이언트는 하나의 계정 만 가질 수 있음을 제안합니다. – pquest

+0

'GetClientByID'는 정확히 어떻게 작동합니까? 다른 db 컨텍스트를 사용하여 '클라이언트'를 검색하는 경우 작동하지 않을 것입니다. –

+0

상호 참조 오류가 있습니다. 두 테이블 모두 Account.Accountid -> Client.AccountId 및 Client.ClientId -> Account.ClientId를 통해 서로 참조했습니다. 여러 인스턴스를 저장할 때 오류가 발생합니다. – agentpx

답변

2

나는이 상황에서 새로운 DbContext를 인스턴스화하는 것을 알 수있다.

효과적으로 "db"를 클래스 수준 필드로 만들어야합니다. DALEntities 다시 인스턴스화되지

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(); 
    } 
} 

참고 : 작동하는지 증명하기 위해 단순화하기 위해 및 또는 다음과 같은 변화를 만들 수 있습니다. 그렇게하면 동일한 변경 추적 프로그램을 사용하게됩니다.

희망이 도움이됩니다.

+0

위대한 작품, 고마워. – hncl

관련 문제