Asp.net 如何应用EF4类型的表在继承自aspnet_用户的子表中创建记录?
从常规的aspnet_Users表中,我创建了两个子表,它们在UserId上具有一对一的关系Asp.net 如何应用EF4类型的表在继承自aspnet_用户的子表中创建记录?,asp.net,entity-framework-4,table-per-type,Asp.net,Entity Framework 4,Table Per Type,从常规的aspnet_Users表中,我创建了两个子表,它们在UserId上具有一对一的关系 Table UserClient -UserId int PK -ClientNumber int Table UserEmployee -UserId int PK -EmployeeNumber int 我已在edmx中创建了每种类型模型的表,现在希望在通过成员资格存储过程创建新的aspnet_用户记录时,在相应的子表中创建相应的记录,如下所示: [HttpPost] public Actio
Table UserClient
-UserId int PK
-ClientNumber int
Table UserEmployee
-UserId int PK
-EmployeeNumber int
我已在edmx中创建了每种类型模型的表,现在希望在通过成员资格存储过程创建新的aspnet_用户记录时,在相应的子表中创建相应的记录,如下所示:
[HttpPost]
public ActionResult CreateUser(CreateUserModel model)
{
if (ModelState.IsValid)
{
// Attempt to create the user
MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);
if (createStatus == MembershipCreateStatus.Success)
{
//now that the aspnet_user record is created...
FilingBizEntities db = new FilingBizEntities();
//Get the role chosen for the user from selectlist on the CreateUser page
var thisrole = db.aspnet_Role.Where(rn => rn.RoleId == model.RoleId).FirstOrDefault();
//Add the user to the role
Roles.AddUserToRole(model.UserName, thisrole.RoleName);
return RedirectToAction("Index", "Users");
}
else
{
ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
}
}
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
return View(model);
}
它是“UserClient”还是“UserEmployee”类型取决于它的RoleId,我目前在查询需要时区分RoleId。现在我希望通过表来扩展每种类型的属性
假设新创建的用户是一个客户端
如何使用aspnet_用户的UserId和此ClientNumber将记录插入UserClient表?为现有用户创建客户端的最佳方法是使用存储过程;不是通过映射连接到客户机实体的存储过程,而是可以从代码显式调用的单独存储过程。
理想情况下,它将是一个SP,它将用户ID作为参数,使用该用户ID向UserClient表中插入新行,然后返回一个完整的客户端对象,以便可以立即使用。创建一个补充表不是更有意义吗,让我们称之为“用户”,并对其应用TPT 您的“用户”表与“aspnet_用户”表(guid或电子邮件)之间有一个FK。然后让你的两张表从那张表派生出来 如果要执行特定于身份验证/成员身份的操作,请使用内置的成员身份提供程序API 如果您想做特定于您的域模型的事情,请使用您的TPH模型
在上面的示例(“创建模型”方法)中,调用成员资格API方法:
MembershipService.CreateUser
(如您所做),然后如果成功,调用另一个名为UserDomainService.CreateUser
的方法,该方法将接受用户刚刚创建的FK(guid或电子邮件),并将新用户保留到您的TPH模型中。谢谢,我现在已经使用了此方法,并将其作为答案进行检查,但下面关于使用存储过程的答案更接近原始问题的关键。没有问题。我只是觉得我可以提供一个替代方案。没问题,很高兴它有帮助:)