2010-09-21 119 views
0

我正在写一个自定义的.NET MembershipProvider(不是内置的),并试图使用实体框架进行更新。但是,我当然没有访问(尝试)UpdateModel。我如何更新它?提前致谢。如何简单地在实体框架中更新实体?

+0

我已更新您的Q以包括您拥有自定义会员供应商的事实。因为不知道,我的回答基本上是浪费时间。 – RPM1984 2010-09-21 22:16:26

回答

0

要使用默认的供应商做,这是一个有点复杂,但是这将是更容易将创建自己的CustomMembershipProvider所列出的位置:

Implementing A Membership Provider

正如你可以做到这一点你自己的您可以编码存储库/ DAL代码,然后使用标准EF实践和惯例,使您可以执行简单且强大的映射操作,例如UpdateModel。

+0

我想要做的是写我自己的会员供应商,但我不知道如何从那里更新我的EF实体。 – Agares 2010-09-21 11:09:32

+0

啊,你需要什么,爵士。是DAL层还是Repository,我强烈推荐使用Dane Morgridge的这个例子,他提供了T4模板,只需将它放在与EDMX模型相同的文件夹中,然后运行,它将为您的模型生成数据存储库(或者至少可以自定义的骨骼)。 http://geekswithblogs.net/danemorgridge/Default.aspx – JTrott 2010-09-21 13:19:50

+0

@Agares,编写自己的会员供应商与更新EF实体无关 - 这是一种标准的EF技术,只是看看周围,你会找到大量的例子。 – RPM1984 2010-09-21 22:18:51

2

您无法使用ASP.NET成员资格提供程序执行此类事情,即将自定义更新写入表中。

如果那么简单,那么很少有人会遇到问题/问题。 =)

甚至不用担心在您的EDMX上添加ASP.NET成员SQL表 - 您不会知道这些关系或表如何真正协同工作。忘记试图将其表现为“模型”。

我的建议是不要尝试绑定到MembershipProvider作为Model(即不创建强类型视图),只需直接从您的控制器调用Membership方法即可。

这是我们开始错过Web窗体的“拖放”的地方,不能放在ChangePassword控件上。 =)

最好的办法是创建一个普通的视图(不是强类型的),然后定期按钮发布到你的控制器方法。

不要试图以模型的形式传递对象,请在Request.Form集合中获取字段。

[HttpPost] 
public ActionResult ChangePassword() 
{ 
    string userName = Request.Form["userName"]; 
    string passWord = Request.Form["passWord"]; 
    MembershipProvider.ChangePassword(userName, password);  
    return View("ChangePasswordSuccess"); 
} 

上述代码将(大致)等同于传递强类型的用户对象,更改密码并调用UpdateModel。

当然,你可以实现自己的会员供应商,但我不相信,实现自定义的供应商只是为了让你的代码“更容易”应该是司机,因为除非正确编码的(这是不容易做到) ,您会损害我们认为理所当然的ASP.NET会员提供商的许多内置安全功能和丰富的帐户管理选项。

+0

+1。 [不要映射会员表](http://blogs.teamb.com/craigstuntz/2010/03/05/38558/) – 2010-09-21 13:20:59