2013-05-17 44 views
8

私はこのエラーを取得する:1つまたは複数のエンティティの検証に失敗しました。詳細は、「EntityValidationErrors」プロパティを参照してください。コードファースト

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. 

私はパッケージマネージャコンソールでUpdate-Databaseコマンドを使用してデータベースを更新しようとします。

Visual Studioの出力ウィンドウに行を書き込むにはどうすればよいですか?

私が試した:

try 
{ 
    context.SaveChanges(); 
} 
catch (System.Data.Entity.Validation.DbEntityValidationException e) 
{ 
    foreach (var eve in e.EntityValidationErrors) 
    { 
     System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", 
      eve.Entry.Entity.GetType().Name, eve.Entry.State); 
     foreach (var ve in eve.ValidationErrors) 
     { 
      System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", 
       ve.PropertyName, ve.ErrorMessage); 
     } 
    } 
    throw; 
} 

をしかし、それは動作しませんでした。これをデバッグする方法に関する他の提案はありますか?

答えて

20

なぜVS出力ウィンドウへの書き込みがうまくいかず、動作させる理由がわかりません。しかし、最後の手段としてだけであなたが持っているアプリケーションの種類とは無関係に動作するはずですテキストファイルに書き込みエラー:

try 
{ 
    context.SaveChanges(); 
} 
catch (System.Data.Entity.Validation.DbEntityValidationException e) 
{ 
    var outputLines = new List<string>(); 
    foreach (var eve in e.EntityValidationErrors) 
    { 
     outputLines.Add(string.Format(
      "{0}: Entity of type \"{1}\" in state \"{2}\" has the following validation errors:", 
      DateTime.Now, eve.Entry.Entity.GetType().Name, eve.Entry.State)); 
     foreach (var ve in eve.ValidationErrors) 
     { 
      outputLines.Add(string.Format(
       "- Property: \"{0}\", Error: \"{1}\"", 
       ve.PropertyName, ve.ErrorMessage)); 
     } 
    } 
    //Write to file 
    System.IO.File.AppendAllLines(@"c:\temp\errors.txt", outputLines); 
    throw; 

    // Showing it on screen 
    throw new Exception(string.Join(",", outputLines.ToArray())); 

} 
+0

こんにちは、なぜ私はそれを考えなかったのですか?ありがとう! – Yustme

+2

@Slauma:ありがとうございました..素敵なトリック..それについて考えたことはありません。これは、良い開発者と非常に良い人の違いが分かる場所です! ;) – user2394196

4

あなたは以下のような例外スタックをそれを渡すことができます。

try 
{ 
    _dbContext.SaveChanges(); 
} 
catch (DbEntityValidationException dbValEx) 
{ 
    var outputLines = new StringBuilder(); 
    foreach (var eve in dbValEx.EntityValidationErrors) 
    { 
    outputLines.AppendFormat("{0}: Entity of type \"{1}\" in state \"{2}\" has the following validation errors:" 
     ,DateTime.Now, eve.Entry.Entity.GetType().Name, eve.Entry.State); 

    foreach (var ve in eve.ValidationErrors) 
    { 
     outputLines.AppendFormat("- Property: \"{0}\", Error: \"{1}\"" 
     ,ve.PropertyName, ve.ErrorMessage); 
    } 
    } 

throw new DbEntityValidationException(string.Format("Validation errors\r\n{0}" 
    ,outputLines.ToString()), dbValEx); 
} 
+0

ありがとう、私はこれも私の次のプロジェクトで試してみましょう! +1 – Yustme

関連する問題