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)。
感谢您的时间。
:
你应该不是这样。 'GetUserId'将返回已存在的用户的信息,然后您使用该'Id'创建一个具有相同'Id'的新用户。 – SOfanatic
用户当前是否已登录系统? WebSecurity.CurrentUserId返回什么值?它是否与UserProfile表中的条目匹配? –