2012-02-20 40 views
2

我在EF Code First中使用POCO類。EF代碼首先插入一對一對象會產生異常。「存儲更新,插入或刪除語句會影響意外數量的行(0)。」

我有一類球爲:

public class Ball 
{ 
    [Key] 
    public int BallId { get; set; } 

    public Box Container { get; set; } 

    [Required] 
    public bool IsCounted{get; set;} 
} 

和一類框爲:

public class Box 
{ 
    [Key] 
    public int BoxId { get; set; } 

    [Required] 
    public string Description { get; set; } 

    public ICollection<Ball> Balls { get; set; } 

} 

我已經創建球的列表,使用我希望創建一個新的盒子! 在創建框:

  1. 每一個球都應該有IsCounted財產真正
  2. 的box.Balls引用應指向現有的對象
  3. 的ball.Container應指向新的盒子!

    public void CreateBox(string Description, ICollection<Ball> givenBalls) 
    { 
        using (var c = new BoxEntryModel()) 
        { 
         Box entry = new Box(); 
         if (c.Boxes.Count().Equals(0)) 
          entry.BoxId = 1; 
         else 
          entry.BoxId = c.Boxes.Max<Box>(b => b.BoxId) + 1; 
         entry.Description = Description; 
         entry.Balls = givenBalls;     
         try 
         { 
          foreach (Ball ball in givenBalls) 
          { 
           c.Balls.Attach(ball); 
           ball.IsCounted = true; 
           ball.Container = entry; 
          } 
          c.Boxes.Add(entry); 
          c.SaveChanges(); 
         } 
    } 
    

    這一段代碼,給了我一個例外:

商店更新,插入或刪除語句影響行的意外數字(0)。自實體加載後,實體可能已被修改或刪除。刷新ObjectStateManager條目。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.Data.OptimisticConcurrencyException:存儲更新,插入或刪除語句會影響意外數量的行(0)。自實體加載後,實體可能已被修改或刪除。刷新ObjectStateManager條目。

此外,如果我評論行 c.Balls.Attach(費用);該代碼有效,但它爲每個Ball創建新行,我試圖將其添加到該框中。

請幫我按照關係保存實體。 在此先感謝。

+0

嗨@manishKungwani,給出的球已經在數據庫中,或者你是否在你的代碼中創建它們? – 2012-06-13 20:05:12

+0

嗨,你在哪裏定義代碼費用? – elgrego 2012-11-19 19:54:33

+0

費用在相同的DataContext中定義,並且givenBalls已經在數據庫中。 – manishKungwani 2012-11-20 04:22:23

回答

0

從你放在這裏的代碼看來,你實際上並沒有在EF中正確設置Balls和Box之間的FK。如果沒有任何正在編輯的東西(至少根據EF,那麼EF)可能會困惑你爲什麼附加球。嘗試建立在你的郵箱代碼如下:

public class Ball 
{ 
    [Key] 
    public int BallId { get; set; } 

    [ForeignKey("Container")] 
    public int BoxID { get; set; } 

    public Box Container { get; set; } 

    [Required] 
    public bool IsCounted{get; set;} 
} 

如果不工作,檢查EntityState每個球的givenBalls(c.Entry(ball).State),看看他們是否已經成爲脫落。

讓我知道這是如何工作的。

+0

它的工作原理,謝謝。 – manishKungwani 2014-07-11 08:13:05

相關問題