これは 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 - 良いなど) があり、ライブラリのようなものです。このテーブルには挿入したくありません。
私がやろうとしているのは、ユーザーがサイトに登録し、先に進むレベルを選択してDBから取得し、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);
そこに既に存在するレベルをレベルテーブルに挿入しようとしていることに関係があると思いますか? もちろん、それは何か他のものかもしれません...何かアドバイスはありますか?前もって感謝します!