这是 MVC 5/EF6。所以我有以下课程:
public class User : IdentityUser
{
public User()
{
Levels = new List<Level>();
}
[Required, MaxLength(200)]
public string FirstName { get; set; }
[Required, MaxLength(200)]
public string LastName { get; set; }
public virtual ICollection<Level> Levels { get; set; }
}
和
public class Level
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; }
}
除了常规的 MVC5 成员表之外,它还创建了 2 个:Levels
和UserLevels
(带有 User_Id 和 Level_Id 列)。Levels
表有一个静态数据(即 1 - 优秀,2 - 好等)并且是一种库,我不想插入到这个表中。
我想要做的是当用户在网站上注册并选择它将继续并从数据库中检索它的级别时,以便该UserLevels
表填充 newUserID
和 selected LevelID
。这是我的代码:
Level level = DBContext.Levels.Where(s => s.Name == model.Level.Name).SingleOrDefault();
if (level == null)
ModelState.AddModelError("", "Invalid Level.");
if (ModelState.IsValid)
{
var user = new User() {
UserName = model.UserName,
FirstName = model.FirstName,
LastName = model.LastName
};
user.Levels.Add(level);
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
return View(model);
它在这一行引发异常:An entity object cannot be referenced by multiple instances of IEntityChangeTracker..
var result = await UserManager.CreateAsync(user, model.Password);
我猜这与试图将已经存在的关卡插入Levels表有关吗?当然它可能是别的东西......有什么建议吗?提前致谢!