我正在编写自定义.NET MembershipProvider(不是内置的),并尝试使用Entity Framework进行更新。但是我当然无法访问(尝试)UpdateModel。我该如何更新?提前谢谢。
答案 0 :(得分:2)
您不能使用ASP.NET成员资格提供程序执行此类操作,即向表中写入自定义更新。
如果那么容易,那么就会有更少的人遇到问题/问题。 =)
甚至不打算在您的EDMX上添加ASP.NET成员资格SQL表 - 您将不知道关系或表如何真正协同工作。忘记尝试将其表示为“模型”。
我的建议是不要尝试将MembershipProvider作为模型绑定(即不创建强类型视图),只需直接从控制器调用Membership方法。
这是我们开始错过Web Forms的“拖放”的地方,不能放在ChangePassword控件上。 =)
您最好的选择是创建一个常规视图(不是强类型),然后使用常规按钮发布到您的控制器方法。
不要尝试将对象作为模型传递,获取Request.Form集合中的字段。
[HttpPost]
public ActionResult ChangePassword()
{
string userName = Request.Form["userName"];
string passWord = Request.Form["passWord"];
MembershipProvider.ChangePassword(userName, password);
return View("ChangePasswordSuccess");
}
上面的代码(大致)相当于传递一个强类型的User对象,更改密码并调用UpdateModel。
当然,您可以实施您自己的会员提供商,但我不相信实施自定义提供程序只是为了使您的代码“更容易”应该是驱动程序,因为除非编码正确(不是您可以轻松地破坏我们认为理所当然的ASP.NET成员资格提供程序的许多内置安全功能和丰富的帐户管理选项。
答案 1 :(得分:0)
使用默认提供程序执行此操作有点复杂,但更容易创建自己的CustomMembershipProvider,如下所示:
Implementing A Membership Provider
正如您可以对您的OWN帐户模型执行此操作,您可以根据您的选择对存储库/ DAL代码进行编码,并使用标准EF实践和约定,允许您执行简单且强映射的操作,例如UpdateModel。
答案 2 :(得分:0)
类似的问题是asked here。
这是一个CodeProject示例应用程序,可以帮助您开始使用EF和Microsoft的MembershipProvider。他们构建了一个继承自MembershipProvider的类 http://www.codeproject.com/KB/web-security/EFMembershipProvider.aspx