Entity Framework を使用して SQL Server データベースに変更を保存しているときに、1 つ以上のエンティティの検証に失敗しました。質問する

Entity Framework を使用して SQL Server データベースに変更を保存しているときに、1 つ以上のエンティティの検証に失敗しました。質問する

編集内容をデータベースに保存したいのですが、ASP.NET MVC 3 / C# で Entity Framework Code-First を使用していますが、エラーが発生します。Event クラスには DateTime と TimeSpan のデータ型がありますが、データベースにはそれぞれ Date と time があります。これが原因でしょうか。変更をデータベースに保存する前に、コード内で適切なデータ型にキャストするにはどうすればよいでしょうか。

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  

'/' アプリケーションでサーバー エラーが発生しました。

1 つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内の発生場所については、スタック トレースを参照してください。

例外の詳細: System.Data.Entity.Validation.DbEntityValidationException: 1 つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。

ソースエラー:

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

ソース ファイル: C:\sep\MvcEventCalendar\MvcEventCalendar\Controllers\EventManagerController.cs 行: 77

スタックトレース:

[DbEntityValidationException: 1 つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。]

ベストアンサー1

次のコードを使用して、 からすべての情報を抽出できます(リストにDbEntityValidationExceptionnamespaces:System.Data.Entity.Validationとを追加する必要があります)。System.Diagnosticsusing

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);
        }
    }
}

おすすめ記事