2013-06-18 18 views
0

我正在使用Visual Studio 2010,C#4.0和實體框架5.0。實體框架5.0,代碼首先,關係,流暢的API和播種數據庫

我(簡體)型號有:

public class Case 
{ 
    public int CaseID { get; set; } 
    public int CaseStatusID { get; set; } 
    public DateTime DateOfNotification { get; set; }   

    public User User { get; set; } 

    public Case() 
    {     
    } 
} 

public class User 
{ 
    public int UserID {get;set;} 
    public string Name { get; set; } 

    public Case Case { get; set; } 

    public User() 
    { 
    } 
} 

數據上下文是:

public class DataContext : DbContext 
{ 
    public DbSet<Case> Cases { get; set; } 
    public DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Case>() 
      .HasKey(m => m.CaseID) 
      .Property(m => m.CaseID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     modelBuilder.Entity<Case>() 
      .HasRequired(m => m.User) 
      .WithRequiredPrincipal(m => m.Case); 
    } 
} 

但我是播種的數據庫:

protected override void Seed(DataContext context) 
    { 
     Case Case = new Case(); 
     Case.CaseStatusID = 1; 
     Case.DateOfNotification = DateTime.Today; 

     Case.User = new User(); 

     Case.User.UserID = Case.CaseID; 
     Case.User.UsersFamilyNameEnc = "Smith"; 
     Case.User.UsersGivenNameEnc = "Petra"; 

     context.Cases.AddOrUpdate(Case);   
     context.SaveChanges(); 
    } 

使用遷移沒有種子數據庫部署沒有錯誤,我可以手動填充數據庫。

如果我註釋掉User類,數據庫會正確種子。

的問題

當我加入user關係和運行遷移命令我得到這個錯誤

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

我看不到EntityValidationErrors任何破發點並沒有達到。

問題似乎是在關係中。我試過不同的方式來指定這個,但結果總是一樣的。

答案

Getting exact error type in from DbValidationException 是溶液的第一部分 - 理解錯誤。然後我需要添加

catch (DbEntityValidationException dbEx) 
{ 
    StringBuilder sb = new StringBuilder(); 

    foreach (var validationErrors in dbEx.EntityValidationErrors) 
    { 
     foreach (var validationError in validationErrors.ValidationErrors) 
     { 
      Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); 
      sb.AppendFormat("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); 
     } 
    } 
    throw new Exception(sb.ToString()); 
} 

(其他兩個答案的amalgm)與嘗試,以獲得errorto軟件包管理器控制檯。

最後,我發現我的「真實」模型包含以下內容:

[NotMapped] 
[Required(ErrorMessage = "The family name/surname is required")] 
[Display(Name = "Family name/surname")] 
public string UserName { get; set; } 

我認爲NotMapped將排除領域,但Required似乎覆蓋。一旦我爲此付出價值,它就開始工作了。

+0

要查看'EntityValidationErrors',請檢查此:http://stackoverflow.com/questions/5345890/getting-exact-error-type-in​​-from-dbvalidationexception – lightbricko

+0

謝謝 - 我現在添加了,但我無法看到跟蹤輸出顯示的位置 - 我應該在哪裏看到;它不在調試窗口中。謝謝。 –

+0

你一直在創建一個新用戶。你確定這是你想要的嗎? – user1908061

回答

0

請參閱上述問題的評論。解決這個問題需要一系列步驟。

  1. 顯示驗證錯誤 - 通過lightbricko上面提到的解決方案使要檢索的錯誤,但他們並沒有在PM控制檯
  2. 能做到這一點通過將stringbuilder的代碼顯示上面再投擲顯示作爲一個新的異常
  3. 最後這表明,這不是映射到數據庫中的字段仍驗證作爲種子處理

旅程的位的一部分,但到了那裏最後 - 感謝所有的在途中的幫助。