Как добавить существующую коллекцию сущностей в существующую сущность, не вытягивая предварительно извлекая существующую сущность из базы данных, используя структуру кода в первую очередь - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь прикрепить две существующие и одну новую ставку к существующему аукциону, но не могу сделать это без предварительного извлечения продукта из базы данных.

Этот код работает, но как бы япросто предоставьте идентификаторы ставок для существующих ставок, а затем сохраните аукцион

using (var db = new DataContext())
    //find existing auction
    var auction = db.Auctions.Find(1);

    var bid1 = db.Bids.Find(1);
    var bid2 = db.Bids.Find(2);
    var bid3 = new Bid()
    {
        //New Bid
    };

    //existing
    auction.Bids.Add(bid1);
    //existing
    auction.Bids.Add(bid2);
    //new
    auction.Bids.Add(bid3);
    db.SaveChanges();
}

РЕДАКТИРОВАТЬ - я тоже пробовал это сделать, но у меня возникла проблема ссылочной целостности: со следующей исключительной ситуацией:

{"Оператор Store update, insert или delete затронул неожиданное количество строк (0). Возможно, объекты были изменены или удалены с момента загрузки объектов. Обновить записи ObjectStateManager."}

        using (var db = new DataContextContext())
        {
            var auction = db.Auctions.Find(1);
            var bid1 = new Bid() { BidId = 1 };
            db.Bids.Attach(bid1);
            auction.Bids.Add(bid1);
            db.SaveChanges();
        }

1 Ответ

0 голосов
/ 02 сентября 2011

Вы можете использовать Присоединить , чтобы добавить известные сущности в контекст БД.

using (var db = new DataContext()) {
    //find existing auction
    var auction = db.Auctions.Find(1);
    var bid1 = new Bid() { BidId = 1 };
    var bid2 = new Bid() { BidId = 2 };

    var bid3 = new Bid()
    {
        //New Bid
    };

    //existing
    db.Attach(bid1);
    auction.Bids.Add(bid1);
    //existing
    db.Attach(bid2);
    auction.Bids.Add(bid2);
    //new
    auction.Bids.Add(bid3);
    db.SaveChanges();
}
...