【问题标题】:How to add existing collection of entities to existing entity without pulling first pulling existing entities from database using code-first framework如何使用代码优先框架将现有实体集合添加到现有实体而不首先从数据库中拉出现有实体
【发布时间】:2011-09-02 17:56:39
【问题描述】:

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

此代码有效,但我将如何只为现有出价提供出价 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();
        }

【问题讨论】:

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


【解决方案1】:

您可以使用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();
}

【讨论】:

  • 嗯...拍卖对象没有 Attach 方法。 db.Auctions.Attach 存在,但我不确定如何使用它来完成我想要做的事情。
  • 对不起,我的错误。我已经更新了我的答案。您需要在数据上下文上调用 Attach。
  • 这对我不起作用,出现参照完整性错误。我会将我的代码作为评论发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多