2013-10-22 42 views
0

亲爱的SO成员请帮我解决我认为应该是一件容易的事情,但我一直坚持了2天。我有几个表需要将FK添加到当前登录用户的UserId中。下面是一个例子ASP.Net MVC 4 SimpleMembership用户ID作为外键

用户配置

[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." 

所有我想要做的是能够创建一个FK表,以登录用户的用户名。为了充分披露信息,客户不应该直接作为用户创建,在我的用例中,当前登录的用户是零售商,所以我试图完成的是用FK创建客户记录给RetailerId(这是UserProfile中的UserId)。

感谢您的时间。

+0

你应该不是这样。 'GetUserId'将返回已存在的用户的信息,然后您使用该'Id'创建一个具有相同'Id'的新用户。 – SOfanatic

+0

用户当前是否已登录系统? WebSecurity.CurrentUserId返回什么值?它是否与UserProfile表中的条目匹配? –

回答

0

我相信你的UserId的外键属性是在错误的地方。因为你正试图添加同一用户

​​
相关问题