我正在使用Visual Studio 2010,C#4.0和Entity Framework 5.0。
我的(简化)模型是:
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());
}
(另外两个答案的合并)试图让errorto成为Package Manager控制台。
最后,我发现我的“真实”模型包含以下内容:
[NotMapped]
[Required(ErrorMessage = "The family name/surname is required")]
[Display(Name = "Family name/surname")]
public string UserName { get; set; }
我认为NotMapped
会排除该字段,但Required
似乎会覆盖此字段。一旦我为此设置了一个值,它就开始工作了。
答案 0 :(得分:0)
请参阅上述问题的评论。解决这个问题需要一系列步骤。
有点旅程但终于到了那里 - 感谢路上的所有帮助。