问题

我想保存我的编辑到数据库,我使用Entity FrameWork Code-First在ASP.NET MVC 3 / C#,但我得到错误.在我的Event类中,我有DateTime和TimeSpan数据类型,但在我的数据库中,我分别有日期和时间.这是原因吗?在将更改保存到数据库之前,如何转换为代码中的相应数据类型.

public class Event
{
    public int EventId { get; set; }
    public int CategoryId { get; set; }
    public int PlaceId { get; set; }
    public string Title { get; set; }
    public decimal Price { get; set; }
    public DateTime EventDate { get; set; }
    public TimeSpan StartTime { get; set; }
    public TimeSpan EndTime { get; set; }
    public string Description { get; set; }
    public string EventPlaceUrl { get; set; }
    public Category Category { get; set; }
    public Place Place { get; set; }
}

控制器中的方法>>>>> storeDB.SaveChanges();中存在问题

// POST: /EventManager/Edit/386        
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
    var theEvent = storeDB.Events.Find(id);

    if (TryUpdateModel(theEvent))
    {
        storeDB.SaveChanges();
        return RedirectToAction("Index");
    }
    else
    {
        ViewBag.Categories = storeDB.Categories.OrderBy(g => g.Name).ToList();
        ViewBag.Places = storeDB.Places.OrderBy(a => a.Name).ToList();
        return View(theEvent);
    }
}

public class EventCalendarEntities : DbContext
{
    public DbSet<Event> Events { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Place> Places { get; set; } 
}

SQL Server 2008 R2数据库/ T-SQL

EventDate (Datatype = date)  
StartTime (Datatype = time)  
EndTime (Datatype = time)  

Http表单

EventDate (Datatype = DateTime) e.g. 4/8/2011 12:00:00 AM  
StartTime (Datatype = Timespan/time not sure) e.g. 08:30:00  
EndTime (Datatype = Timespan/time not sure) e.g. 09:00:00  

一个或多个实体的验证失败.有关更多详细信息,请参阅"EntityValidationErrors"属性.

说明:在执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其在代码中的起源位置的更多信息.

异常详细信息:System.Data.Entity.Validation.DbEntityValidationException:一个或多个实体的验证失败.有关更多详细信息,请参阅"EntityValidationErrors"属性.

源错误:

Line 75:             if (TryUpdateModel(theEvent))
Line 76:             {
Line 77:                 storeDB.SaveChanges();
Line 78:                 return RedirectToAction("Index");
Line 79:             }

Source File: C:\sep\MvcEventCalendar\MvcEventCalendar\Controllers\EventManagerController.cs Line: 77

堆栈跟踪:

[DbEntityValidationException:一个或多个实体的验证失败.有关更多详细信息,请参阅'EntityValidationErrors'属性.]



解决方法

您可以使用以下代码从 DbEntityValidationException 中提取所有信息(您需要添加命名空间: System.Data.Entity.Validation System .Diagnostics 到您的使用列表):

catch (DbEntityValidationException dbEx)
{
    foreach (var validationErrors in dbEx.EntityValidationErrors)
    {
        foreach (var validationError in validationErrors.ValidationErrors)
        {
            Trace.TraceInformation("Property: {0} Error: {1}", 
                                    validationError.PropertyName, 
                                    validationError.ErrorMessage);
        }
    }
}



相关问题推荐