2011-08-03 2 views
1

I했습니다 DB에 특정 유형의 요소를 추가, 업데이트 및 삭제를위한 도구를 제공합니다 다음 BLL 클래스 : 나는 자산과 DB에 새로운 요소를 추가 할 때삽입 후 DataContext 컬렉션이 새로 고쳐지지 않는 이유는 무엇입니까?

public class Asset 
{ 
    private Data.DicDataContext _db; 
    public Asset(int assetID) 
{ 
    _db = new Data.DicDataContext(); 
    _asset = _db.Assets.First(a => a.id == assetID); 
} 
    public static Asset New(int assetTypeID, int containerID) 
{ 
     Asset nAsset; 
     using (Data.DicDataContext db = new Data.DicDataContext()) 
     { 
      Data.Asset asset = new Data.Asset(); 

      asset.typeID = assetTypeID; 
      asset.containerID = containerID; 
      asset.createdDate = DateTime.Now; 

      Data.User user = (Data.User)db.Users.First(u => u.id == Convert.ToInt32(HttpContext.Current.Session["user"])); 

      user.Assets.Add(asset); 
      db.SubmitChanges(); 

      nAsset = new Asset(asset.id); 
     } 
     return nAsset; 
} 
} 

문제가 발생한다 .새로운(). 요소가 db에 올바르게 저장되어 있지만 새 Asset() 생성자로 새로 추가 된 요소를 수집하려고하면 요소가 시퀀스에서 발견되지 않습니다.

도움이 매우 감사 할 것입니다!

답변

0

다음과 같이 코드를 변경해야합니다.

public Asset(int assetID) 
{ 
    using (Data.DicDataContext db = new Data.DicDataContext()) 
    { 
     _asset = db.Assets.First(a => a.id == assetID); 
    } 
} 

정말 당신은 모든 방법에 using이 있어야합니다 그래서 Data.DicDataContext()

이 줄 private Data.DicDataContext _db;

에 대한 참조를 꺼내 열어 연결을 유지하는 좋은 방법이 아닙니다 유의하시기 바랍니다. 새로운 방법과 같습니다.

+0

빠른 수정, db.Assets가 아닌 db라고 말하고자하는 것 같습니다. _db와 같은 _db는 명시한대로 제거해야합니다. – Richard

+0

@ 리차드, 맞습니다. 죄송합니다. 복사 및 붙여 넣기. : P – Jethro

+0

@ Jethro, 빠른 답변 주셔서 감사합니다! 좋은 것을 남겨두기가 힘들다 '모든 것이 정치적으로 재사용된다. 다음 newb 질문 - 내가 영구적으로 _asset을 저장하려면 어떻게해야합니까? 자산에 대한 참조 만 저장하는 것으로 보이고 DC를 닫으면 참조가 사라집니다. – Marle1

관련 문제