2014-02-17 96 views
0

我有一個MVC 5網站首先使用EF6代碼。EF更新插入到不同的表

該網站將跟蹤事件的高爾夫結果。

這裏是我的波蘇斯:

public class Event 
    { 
     public int EventId { get; set; } 
     public string VenueName { get; set; } 
     public string CourseName { get; set; } 
     public String FirstTeeOff { get; set; } 
     public DateTime EventDate { get; set; } 
     public decimal Fee { get; set; } 
     public virtual ICollection<Result> Results { get; set; } 
    } 

public class Golfer 
    { 
     public int GolferId { get; set; } 
     public string FirstName { get; set; } 
     public string Surname { get; set; } 
     public int CurrentHandicap { get; set; } 
     public string Email { get; set; } 
     public string Telephone { get; set; } 
     public virtual ICollection<Result> Results { get; set; } 
    } 

public class Result 
    { 
     public int ResultId { get; set; } 
     public Golfer Golfer { get; set; } 
     public Event Event { get; set; } 
     public bool Attendance { get; set; } 
     public int HandicapPlayed { get; set; } 
     public int ScoreCarded { get; set; } 
     public int LongestDriveWins { get; set; } 
     public int NearestPinWins { get; set; } 

     public Result() 
     { 
      Event = new Event(); 
      Golfer = new Golfer(); 
     } 
    } 

我的結果POST編輯操作如下:

[HttpPost] 
     [Authorize] 
     public ActionResult Edit(ResultViewModel resultVM) 
     { 
      try 
      { 
       DomainClasses.Result resultDomain = _context.Results.Find(resultVM.GolferResults[0].ResultId); 


       resultDomain.Attendance = resultVM.GolferResults[0].Attendance; 
       resultDomain.HandicapPlayed = resultVM.GolferResults[0].HandicapPlayed; 
       resultDomain.ScoreCarded = resultVM.GolferResults[0].ScoreCarded; 
       resultDomain.LongestDriveWins = resultVM.GolferResults[0].LongestDriveWins; 
       resultDomain.NearestPinWins = resultVM.GolferResults[0].NearestPinWins; 


       _context.Results.Attach(resultDomain); 
       _context.SaveChanges(); 

       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

我在調用SaveChanges得到一個錯誤。我已經使用EF Profiler,它顯示它試圖插入Event表中:

INSERT [dbo].[Events] 
     ([VenueName], 
     [CourseName], 
     [FirstTeeOff], 
     [EventDate], 
     [Fee]) 
VALUES (NULL, 
     NULL, 
     NULL, 
     '0001-01-01T00:00:00' /* @0 */, 
     0 /* @1 */) 



SELECT [EventId] 
FROM [dbo].[Events] 
WHERE @@ROWCOUNT > 0 
     AND [EventId] = scope_identity() 

任何idead爲什麼?

回答

3

,因爲你在Result構造函數創建相關實體的情況下,這是最有可能的:

Event = new Event(); 
Golfer = new Golfer(); 

取下構造這些行。

+0

就是這樣!非常感謝Slauma。 –