尝试将ApplicationUser播种到数据库

时间:2015-06-02 14:45:53

标签: asp.net-mvc exception code-first identity

我遇到了一个非常持久的错误,试图首先使用代码和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();

提前谢谢。

1 个答案:

答案 0 :(得分:0)

应该是

  

new ThemeLevelUser {LevelID = levels [0],ThemeID = themes [0],UserID   = user.ID ,日期=新日期时间(2015年,4年,12年)}

使用.ID而不是作为参考,因为它尝试在插入时创建整个“用户”作为子实体。只是身份证,你就没有问题了。您可以通过添加两个单独的属性来实现此目的 - ThemeLevelUser.User和ThemeLevelUser.UserId - EF将按惯例识别后者是前者的外键。然后你只设置ThemeLevelUser.UserId,你就完成了外键约束而没有错误。