我遇到了一个非常持久的错误,试图首先使用代码和Identity Users来播放我的数据库。我基本上使用的是默认的MVC ApplicationUser
,我有一些以ApplicationUser
为属性的类(就像ApplicationUser
的外键一样)。但是,我不断得到一个DbEntityValidationException
告诉我,我已经有了我试图在数据库中播种的用户(是的,数据库事先被删除)。我猜想发生的事情是,每当我播种一个具有ApplicationUser
属性的类时,它就会再次创建它。有人知道如何防止这种情况?我正在使用的代码:
添加用户:
var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var user = new ApplicationUser() {
UserName = "User20",
Email = "Email20@Example.com",
};
manager.Create(user, string.Format("Pricardo{0}.", i.ToString()));
添加其他类型的课程:
var tlu = new List<ThemeLevelUser> {
new ThemeLevelUser { LevelID = levels[0], ThemeID = themes[0], UserID = user, Date = new DateTime(2015, 4, 1) },
new ThemeLevelUser { LevelID = levels[0], ThemeID = themes[0], UserID = user, Date = new DateTime(2015, 4, 7) },
new ThemeLevelUser { LevelID = levels[0], ThemeID = themes[0], UserID = user, Date = new DateTime(2015, 4, 12) }
}
tlu.ForEach(x => TLURepository.Insert(x));
TLURepository.Save();
提前谢谢。
答案 0 :(得分:0)
应该是
new ThemeLevelUser {LevelID = levels [0],ThemeID = themes [0],UserID = user.ID ,日期=新日期时间(2015年,4年,12年)}
使用.ID而不是作为参考,因为它尝试在插入时创建整个“用户”作为子实体。只是身份证,你就没有问题了。您可以通过添加两个单独的属性来实现此目的 - ThemeLevelUser.User和ThemeLevelUser.UserId - EF将按惯例识别后者是前者的外键。然后你只设置ThemeLevelUser.UserId,你就完成了外键约束而没有错误。