EF更新正在插入并进入另一个表

时间:2014-02-17 18:38:26

标签: entity-framework

我有一个首先使用EF6代码的MVC 5网站。

该网站将在活动中跟踪高尔夫结果。

以下是我的pocos:

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,它显示它正在尝试插入事件表:

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

任何想法为什么?

1 个答案:

答案 0 :(得分:3)

这很可能是因为您在Result构造函数中创建了相关实体的实例:

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

从构造函数中删除这些行。