Почему не обновлять коллекцию DataContext после вставки? - PullRequest
1 голос
/ 03 августа 2011

У меня есть следующий класс BLL, который предоставляет инструменты для добавления, обновления и удаления элементов определенного типа в БД:

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 (). Элемент правильно сохраняется в БД, но когда я пытаюсь собрать вновь добавленный элемент с новым конструктором Asset (), элемент не найден в последовательности.

Любая помощь будет очень признателен!

1 Ответ

0 голосов
/ 03 августа 2011

Вам нужно изменить свой код, чтобы он выглядел следующим образом.

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 в каждом методе.Как в вашем новом методе.

...