0

親愛なる 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)。

御時間ありがとうございます。

4

1 に答える 1