2011-08-03 23 views
1

我有以下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; 
} 
} 

的问题出现了,当我添加新元素与资产数据库。新()。该元件正确保存在数据库中,但是当我尝试收集与新的资产()构造器新添加的元素,该元素不是序列中发现的。

任何帮助将是非常感激!

回答

0

你需要改变你的代码,所以它看起来是这样的。

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

请注意它是不是一个真正的好做法,以保持连接打开,以便大家参考拿出来的Data.DicDataContext()

此行private Data.DicDataContext _db;

你必须在每一个方法的using。就像在你的新方法中一样。

+0

只是一个快速的修正,我觉得你的意思是说db.Assets,不_db.Assets因为就像你说_db应该被删除。 – Richard

+0

@Richard,这就是正确的,对不起,现在修复。复制和粘贴。 :P – Jethro

+0

@Jethro,感谢您的快速答复!有点难以离开这个好酒吧'重新使用一切政治。然而,下一个newb问题 - 我如何永久保存_asset?它似乎只保存对资产的引用,并且当我关闭DC时,引用已经消失。 – Marle1