C# 一个或多个实体的MVC5验证失败。见';实体验证错误';属性以获取更多详细信息
我似乎无法使用种子方法获取更新数据库来填充我的数据库 我用EF编写了一个MVC4应用程序,现在正在用EF将其升级到MVC5。以前在MVC4中,我必须创建一个名为User.cs的类,但在带有Identity的MVC5中,我们需要从IdentityUser派生我们的用户类 我使用了与MVC4配置文件完全相同的代码,只是更改了:C# 一个或多个实体的MVC5验证失败。见';实体验证错误';属性以获取更多详细信息,c#,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Asp.net Identity,我似乎无法使用种子方法获取更新数据库来填充我的数据库 我用EF编写了一个MVC4应用程序,现在正在用EF将其升级到MVC5。以前在MVC4中,我必须创建一个名为User.cs的类,但在带有Identity的MVC5中,我们需要从IdentityUser派生我们的用户类 我使用了与MVC4配置文件完全相同的代码,只是更改了: var users = new List<User> 到 错误在这里的第61行 users.ForEach(s=>context.users.AddOrUpda
var users = new List<User>
到
错误在这里的第61行
users.ForEach(s=>context.users.AddOrUpdate(p=>p.FirstMidName,s));
context.SaveChanges()
PM>更新数据库
指定'-Verbose'标志以查看应用于目标数据库的SQL语句。
没有挂起的显式迁移。
运行种子法。
System.Data.Entity.Validation.DbEntityValidationException:一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
位于System.Data.Entity.Internal.InternalContext.SaveChanges()处
在System.Data.Entity.Internal.LazyInternalContext.SaveChanges()中
位于System.Data.Entity.DbContext.SaveChanges()处
在C:\Users\Jason\Documents\Visual Studio 2015\Projects\RecreationalServicesTicketingSystem\RecreationalServicesTicketingSystem\Migrations\Configuration.Seed(ApplicationDbContext上下文)的C:\Users\Jason\Documents\Visual Studio 2015\Projects\RecreationalServicesTicketingSystem\RecreationalServicesTicketingSystem\Migrations\Configuration.cs:第62行
在System.Data.Entity.Migrations.DbMigrationsConfiguration`1.OnSeed(DbContext上下文)中
位于System.Data.Entity.Migrations.DbMigrator.SeedDatabase()处
位于System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase()处
位于System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations,String targetMigrationId,String lastMigrationId)
位于System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations,字符串targetMigrationId,字符串lastMigrationId)
位于System.Data.Entity.Migrations.Dbmigator.UpdateInternal(字符串targetMigration)
在System.Data.Entity.Migrations.DbMigrator.c__DisplayClassc.b__b()中
位于System.Data.Entity.Migrations.Dbmigator.EnsureDatabaseExists(操作必须成功才能访问数据库)
位于System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(操作必须成功才能使用数据库)
位于System.Data.Entity.Migrations.DbMigrator.Update(字符串targetMigration)
位于System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串targetMigration)
在System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()中
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
位于System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner)
位于System.Data.Entity.Migrations.Design.ToolingFacade.Update(字符串targetMigration,布尔力)
在System.Data.Entity.Migrations.UpdateDatabaseCommand.c__DisplayClass2.b__0()中
位于System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)
一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
cs(包含我的用户类的代码段)
公共类应用程序用户
:IdentityUser,IUser
{
公共异步任务
GenerateUserIdentityAsync(用户管理器)
{
var userIdentity=等待管理器
.CreateIdentityAsync(这是DefaultAuthenticationTypes.ApplicationOkie);
返回用户身份;
}
公共布尔IsAdministrator{get;set;}
[StringLength(50,最小长度=1)]
公共字符串LastName{get;set;}
[StringLength(50,MinimumLength=1,ErrorMessage=“名字不能超过50个字符)。]
[列(“名字”)]
公共字符串FirstMidName{get;set;}
公共字符串全名
{
获取{return FirstMidName+“”+LastName;}
}
[数据类型(DataType.Date)]
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyFormatInEditMode=true)]
公共日期时间注册日期{get;set;}
public int DepartmentID{get;set;}
[外键(“部门ID”)]
公共虚拟部门部门{get;set;}
public int DepotID{get;set;}
[外键(“DepotID”)]
公共虚拟仓库{get;set;}
公共虚拟ICollection票证{get;set;}
}
配置.cs(种子方法)
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
}
受保护的重写无效种子(ApplicationDbContext上下文)
{
var部门=新列表
{
新部门{DepartmentID=1,DepartmentName=“IT”},
新部门{DepartmentID=2,DepartmentName=“Menzit Admin”},
新部门{DepartmentID=3,DepartmentName=“人力资源”},
新部门{DepartmentID=4,DepartmentName=“Mechanics”},
新部门{DepartmentID=5,DepartmentName=“Directors”},
新部门{DepartmentID=6,DepartmentName=“Operations”}
};
departments.ForEach(s=>context.departments.AddOrUpdate(p=>p.DepartmentName,s));
SaveChanges();
var仓库=新列表
{
新仓库{DepotID=1,DepotName=“Porana”},
新仓库{DepotID=2,DepotName=“Far North”},
新仓库{DepotID=3,DepotName=“Horowhenua”},
新仓库{DepotID=4,DepotName=“Manawatu”},
新仓库{DepotID=5,DepotName=“Silverdale”},
新仓库{DepotID=6,DepotName=“基督城”},
};
depots.ForEach(s=>context.depots.AddOrUpdate(p=>p.DepotName,s));
SaveChanges();
var users=新列表
var users = new List<ApplicationUser>
new User{ FirstMi....
new ApplicationUser { FirstMi....
PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending explicit migrations.
Running Seed method.
System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
at System.Data.Entity.Internal.InternalContext.SaveChanges()
at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
at System.Data.Entity.DbContext.SaveChanges()
at RecreationalServicesTicketingSystem.Migrations.Configuration.Seed(ApplicationDbContext context) in C:\Users\Jason\Documents\Visual Studio 2015\Projects\RecreationalServicesTicketingSystem\RecreationalServicesTicketingSystem\Migrations\Configuration.cs:line 62
at System.Data.Entity.Migrations.DbMigrationsConfiguration`1.OnSeed(DbContext context)
at System.Data.Entity.Migrations.DbMigrator.SeedDatabase()
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase()
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
public class ApplicationUser
: IdentityUser<int, ApplicationUserLogin,
ApplicationUserRole, ApplicationUserClaim>, IUser<int>
{
public async Task<ClaimsIdentity>
GenerateUserIdentityAsync(UserManager<ApplicationUser, int> manager)
{
var userIdentity = await manager
.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
public bool IsAdministrator { get; set; }
[StringLength(50, MinimumLength = 1)]
public string LastName { get; set; }
[StringLength(50, MinimumLength = 1, ErrorMessage = "First name cannot be longer than 50 characters.")]
[Column("FirstName")]
public string FirstMidName { get; set; }
public string FullName
{
get { return FirstMidName + " " + LastName; }
}
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime EnrollmentDate { get; set; }
public int DepartmentID { get; set; }
[ForeignKey("DepartmentID")]
public virtual Department Department { get; set; }
public int DepotID { get; set; }
[ForeignKey("DepotID")]
public virtual Depot Depot { get; set; }
public virtual ICollection<Ticket> Tickets { get; set; }
}
internal sealed class Configuration : DbMigrationsConfiguration<RecreationalServicesTicketingSystem.Models.ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(ApplicationDbContext context)
{
var departments = new List<Department>
{
new Department { DepartmentID = 1, DepartmentName = "IT"},
new Department { DepartmentID = 2, DepartmentName = "Menzit Admin" },
new Department { DepartmentID = 3, DepartmentName = "Human Resources"},
new Department { DepartmentID = 4, DepartmentName = "Mechanics" },
new Department { DepartmentID = 5, DepartmentName = "Directors" },
new Department { DepartmentID = 6, DepartmentName = "Operations"}
};
departments.ForEach(s => context.Departments.AddOrUpdate(p => p.DepartmentName, s));
context.SaveChanges();
var depots = new List<Depot>
{
new Depot { DepotID = 1, DepotName = "Porana"},
new Depot { DepotID = 2, DepotName = "Far North"},
new Depot { DepotID = 3, DepotName = "Horowhenua"},
new Depot { DepotID = 4, DepotName = "Manawatu"},
new Depot { DepotID = 5, DepotName = "Silverdale"},
new Depot { DepotID = 6, DepotName = "Christchurch"},
};
depots.ForEach(s => context.Depots.AddOrUpdate(p => p.DepotName, s));
context.SaveChanges();
var users = new List<ApplicationUser>
{
new ApplicationUser { FirstMidName = "Jason", LastName = "Wan",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1, DepotID = 1,IsAdministrator = true},
new ApplicationUser { FirstMidName = "Andy", LastName = "Domagas",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1,DepotID = 1,IsAdministrator = true},
new ApplicationUser { FirstMidName = "Denis", LastName = "Djohar",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1 ,DepotID = 1,IsAdministrator = true },
new ApplicationUser { FirstMidName = "Christine", LastName = "West",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 2, DepotID = 3,IsAdministrator = false},
};
users.ForEach(s => context.Users.AddOrUpdate(p => p.FirstMidName, s));
context.SaveChanges(); <--ERROR HERE
users.ForEach(s => context.Users.AddOrUpdate(p => p.LastName, s));
context.SaveChanges();
var categories = new List<Category>
{
new Category {CategoryID = 0001, CategoryName = "Desktop"},
new Category {CategoryID = 0002, CategoryName = "Mobile"},
new Category {CategoryID = 0003, CategoryName = "Menzits"},
new Category {CategoryID = 0004, CategoryName = "XMPRO"},
new Category {CategoryID = 0005, CategoryName = "Con-X"},
new Category {CategoryID = 0006, CategoryName = "Promapp"},
new Category {CategoryID = 0007, CategoryName = "QGIS"},
};
categories.ForEach(s => context.Categories.AddOrUpdate(p => p.CategoryName, s));
context.SaveChanges();
var tickets = new List<Ticket>
{
new Ticket {
UserID = users.Single(s => s.LastName == "Wan").Id, //UserID
CategoryID = categories.Single(c => c.CategoryName == "Con-X" ).CategoryID,
Issue = ("Con-X Login Error"),
Priority = Priority.High
},
new Ticket {
UserID = users.Single(s => s.LastName == "Wan").Id, //UserID
CategoryID = categories.Single(c => c.CategoryName == "Desktop" ).CategoryID,
Issue = ("Can't remote access C0123"),
Priority = Priority.Med
},
};
foreach (Ticket e in tickets)
{
var ticketInDataBase = context.Tickets.Where(
s =>
s.User.Id == e.UserID && //UserID
s.Category.CategoryID == e.CategoryID).SingleOrDefault();
if (ticketInDataBase == null)
{
context.Tickets.Add(e);
}
}
context.SaveChanges();
}
}
try
{
db.Entity.Add(entity);
db.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
System.Console.WriteLine("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
}
}
}
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors