親愛なる SO メンバーの皆さん、簡単な作業だと思っていたのに 2 日間も行き詰まってしまったのを解決するのを手伝ってください。現在ログインしているユーザーの UserId への FK が必要なテーブルがいくつかあります。ここに例があります
ユーザープロフィール
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string ManagerName { get; set; }
public string PhoneNumber { get; set; }
}
顧客エンティティ
public class Customer
{
[Key]
public int CustomerId { get; set; }
public string Names { get; set; }
[ForeignKey("UserProfile")]
public int UserId { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
DB コンテキスト
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Customer> Customers { get; set; }
}
カスタマーコントローラー
[HttpPost]
[InitializeSimpleMembership]
[ValidateAntiForgeryToken]
public ActionResult Create(Customer model)
{
if (ModelState.IsValid)
{
model.UserProfile = db.UserProfiles.FirstOrDefault(u => u.UserId == WebSecurity.CurrentUserId);
db.Customers.Add(model);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UserId = new SelectList(db.UserProfiles, "UserId", "UserName", model.UserId);
return View(model);
}
また試した
[HttpPost]
[InitializeSimpleMembership]
[ValidateAntiForgeryToken]
public ActionResult Create(Customer model)
{
if (ModelState.IsValid)
{
model.UserId = WebSecurity.GetUserId(User.Identity.Name);
db.Customers.Add(model);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UserId = new SelectList(db.UserProfiles, "UserId", "UserName", model.UserId);
return View(model);
}
いずれの場合も、エラーメッセージが表示されます
"The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Customers_dbo.UserProfile_UserId". The conflict occurred in database "ValueCardProject", table "dbo.UserProfile", column 'UserId'.
The statement has been terminated."
私がしたいのは、ログインしているユーザーの UserID への FK を持つテーブルを作成できるようにすることだけです。完全な開示のために、顧客はユーザーとして直接作成されるべきではありません。私の使用例では、現在ログインしているユーザーは小売業者であるため、私が達成しようとしているのは、RetailerId への FK を使用して顧客レコードを作成することです (これはUserProfile の UserId)。
御時間ありがとうございます。