如何将现有实体集合添加到现有实体,而不必先使用代码优先框架从数据库中提取现有实体

时间:2011-09-02 17:56:40

标签: entity-framework-4 ef-code-first code-first

我正在尝试将两个现有和一个新的出价加入到现有的竞价中,但如果没有先从数据库中提取产品,我就无法这样做。

此代码有效,但我如何仅为现有出价提供出价ID,然后保存拍卖

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

编辑 - 我也试过这个,但是引起了参照完整性问题:具有以下不足之处:

{“存储更新,插入或删除语句影响了意外的行数(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 :(得分:0)

您可以使用Attach将已知实体添加到数据库上下文中。

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