Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何应用EF4类型的表在继承自aspnet_用户的子表中创建记录?_Asp.net_Entity Framework 4_Table Per Type - Fatal编程技术网

Asp.net 如何应用EF4类型的表在继承自aspnet_用户的子表中创建记录?

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

从常规的aspnet_Users表中,我创建了两个子表,它们在UserId上具有一对一的关系

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模型中。

谢谢,我现在已经使用了此方法,并将其作为答案进行检查,但下面关于使用存储过程的答案更接近原始问题的关键。没有问题。我只是觉得我可以提供一个替代方案。没问题,很高兴它有帮助:)