2011-08-03 17 views
1

私は、DB内の特定の型の要素を追加、更新、および削除するためのツールを提供し、次のBLLクラスを、しました:挿入後に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に新しい要素を追加するときに問題が発生します。新しい()。要素は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.Assetsと言うことを意味していたと思います。 – Richard

+0

@リチャード、それは正しい、申し訳ありません今修正します。コピー&ペースト。 :P – Jethro

+0

@Jethro、あなたの迅速な答えに感謝!良いolを残すのは難しいですが、すべて政治的なものを再利用しています。次のnewb質問 - どうすれば永久に_assetを保存できますか?アセットへの参照を保存するように見えるだけで、DCをクローズすると参照はなくなります。 – Marle1