C# 实体框架5.0、代码优先、关系、fluent API和数据库种子
我使用的是Visual Studio 2010、C#4.0和Entity Framework 5.0 我的(简化)模型是:C# 实体框架5.0、代码优先、关系、fluent API和数据库种子,c#,entity-framework,ef-code-first,fluent-interface,C#,Entity Framework,Ef Code First,Fluent Interface,我使用的是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;
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);
}
}
使用无种子迁移,数据库部署时不会出现错误,我可以手动填充数据库
如果我注释掉用户
类,则数据库种子会正确
问题
一旦我添加了user
关系并运行migration命令,我就会得到这个错误
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
我看不到EntityValidationErrors和任何未达到的断点
问题似乎出在这段关系上。我尝试了不同的方法来说明这一点,但结果总是一样的
答案
这是解决方案的第一部分——理解错误。然后我需要补充一点
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());
}
(另外两个答案的集合)尝试将错误发送到PackageManager控制台
最后,我发现我的“真实”模型包含以下内容:
[NotMapped]
[Required(ErrorMessage = "The family name/surname is required")]
[Display(Name = "Family name/surname")]
public string UserName { get; set; }
我以为
NotMapped
会排除该字段,但Required
似乎会覆盖该字段。一旦我为它输入了一个值,它就开始工作了。请查看上面问题的注释。需要采取一系列步骤来解决这个问题
虽然经历了一段旅程,但最终到达了目的地-感谢路上的所有帮助。要查看“EntityValidationErrors”,请检查以下内容:谢谢-我现在已在中添加了,但我看不到跟踪输出显示在哪里-我应该在哪里看到它;它不在调试窗口中。谢谢。你总是在创建一个新用户。你确定这就是你想要的吗?@lightbricko我发现了问题;“real”类有一个未映射到数据库的必填字段。当我能够看到验证错误时,所有问题都解决了。请张贴作为答案,这样我可以给你答案points@PeterSmith,我很高兴问题解决了。我认为你应该把你在链接中找到的有用答案投上一票,(然后这个问题可以标记为重复)
[NotMapped]
[Required(ErrorMessage = "The family name/surname is required")]
[Display(Name = "Family name/surname")]
public string UserName { get; set; }