【问题标题】:Why wont the DataContext collection refresh after insertion?为什么插入后 DataContext 集合不会刷新?
【发布时间】:2011-08-03 11:32:48
【问题描述】:

我有以下 BLL 类,它提供了在 db 中添加、更新和删除特定类型元素的工具:

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

当我使用 Asset.New() 向数据库添加一个新元素时,问题就出现了。该元素已正确保存在数据库中,但是当我尝试使用 new Asset() 构造函数收集新添加的元素时,在序列中找不到该元素。

任何帮助将不胜感激!

【问题讨论】:

    标签: c# linq-to-sql datacontext


    【解决方案1】:

    您需要更改您的代码,使其看起来像这样。

    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。就像在你的新方法中一样。

    【讨论】:

    • 只是一个快速的更正,我认为你的意思是说 db.Assets,而不是 _db.Assets,因为 _db 应该像你所说的那样被删除。
    • @Richard,那是正确的,抱歉现在修复。复制和粘贴。 :P
    • @Jethro,感谢您的快速回答!有点难以离开好人重用一切政治。下一个新手问题 - 我如何永久保存_asset?它似乎只保存了对资产的引用,当我关闭 DC 时,引用就消失了。
    • 我们回到绘图板上,为我们的 BBL 模式提出了一种完全不同的方法。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2014-09-06
    • 2020-10-14
    • 2021-04-12
    • 2019-05-04
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多