2011-09-02 105 views
1

我试图将两个现有和一个新的出价附加到现有的拍卖,但我无法做到这一点而无需首先从数据库中提取产品。如何将现有实体集合添加到现有实体,而无需先使用代码优先的框架从数据库中提取现有实体

此代码的工作,但我将如何去只是提供了投标的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(); 
} 

编辑 - 我想这是很好的,但有一个参照完整性问题:用下面的InnerException:

{“店更新,插入或删除语句影响的行(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(); 
     } 
+0

这个问题涉及到一个关于附加一个已知实体的前一个问题 - 我明白了这一点。 http://stackoverflow.com/questions/7286004/how-do-i-add-a-reference-to-another-existing-entity-using-code-first-framework-wi –

回答

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

嗯...拍卖对象doesn虽然没有Attach方法。 db.Auctions.Attach存在,但我不知道我将如何使用它来完成我想要做的事情。 –

+0

对不起,我的错。我已经更新了我的答案。你需要在数据上下文中调用Attach。 –

+0

这对我不起作用,得到了参照完整性错误。我将发布我的代码作为评论。 –

相关问题