2009-06-25 3 views
1

내가 사용하려고 해요 :Linq를하려면 SQL 법인 운영

// this is a BreakHistory class from the ADO.NET Data Entity Model _entities 
_entities.AddToBreakHistory(this); 
_entities.SaveChanges(); 

를 내가지고있어 "엔티티 객체가 IEntityChangeTracker의 여러 인스턴스에서 참조 할 수 없습니다."

_entities.ApplyPropertyChanges(this.EntityKey.EntitySetName, this); 
_entities.SaveChanges(); 

을하고 난 아마 오류의 동일한 유형을 얻을 것이다 생각하고 있어요 : 오류

내 업데이트 코드라고 생각 해요.

originalBreakHistory 객체를 이와 같이 가져와야합니까?

var originalBreakHistory = (from bh in _entities.BreakHistorySet where bh.BreakHistoryID = id select bh).FirstOrDefault(); 

는 - 내가 관련이있을 수있는 다른 문제가 될 수 있음을 보인다 오후 4시 40분 같은 날 에 업데이트되었습니다. 관련이있어서 현재이 BreakHistory 엔티티에 Manager 엔티티 객체를 추가하려고합니다.이 오류가 발생합니다 : "다른 ObjectContext 객체에 첨부되어 있기 때문에 두 객체 간의 관계를 정의 할 수 없습니다."

동일한 엔터티 모델을 사용하고 있지만 엔터티 개체에 "new"를 호출하고 DB에서로드하기 때문에 그 오류가 발생할 수 있습니까 ??

여기 내 코드의 일부입니다 :

protected void lstBreaks_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    var bh = new BreakHistory().CurrentBreakRequest(int.Parse(e.CommandArgument.ToString())).CurrentManagerIs(GetManagerEntityByUserName()); 

    switch (e.CommandName) 
    { 
     case "Approve": 
      bh.Approve(); 
      break; 
     case "Deny": 
      bh.Deny(); 
      break; 
     case "Push": 
      bh.Push(); 
      break; 
    } 

    bh.Save(); 

    LoadBreakList(); 
} 

에 대한 예제의 코드 승인 - bh.Approve()를 다음과 같습니다

public BreakHistory Approve() 
{ 
    this.DateApproved = DateTime.Now; 
    this.ManagerApprove = CurrentManager; 

    return this; 
} 

관리자가 승인 거부 또는 푸시 할 수 있습니다 요청은 관리자 ID를 통해 BreakHistory와 관련되어 있습니다.

답변

0

기존 레코드를 검색하는 경우 new 연산자를 사용할 필요가 없습니다. 그게 너를 매달아 놓은 것일 수도있어.

모든 업데이트에 대해 동일한 DataContext 개체를 사용하고 있는지 확인하십시오. 여러 가지 이유로 한 DataContext에서 다른 DataContext로 객체를 이동하는 것은 어렵습니다.

+0

저는 Linq와 전체 엔터티 모델 구조를 배우고 있습니다. 당신 말이 맞아요, 전 완전히 분리 된 두 개의 DataContext를 사용하고있었습니다. – kntcnrg