【问题标题】:How to simply update entity in entity framework?如何简单地更新实体框架中的实体?
【发布时间】:2010-09-21 09:47:59
【问题描述】:

我正在编写一个自定义的 .NET MembershipProvider(不是内置的)并尝试使用实体框架进行更新。但是我当然无法访问(尝试)UpdateModel。我该如何更新它?提前致谢。

【问题讨论】:

  • 我已更新您的 Q 以包含您拥有自定义会员提供程序的事实。因为不知道,我的回答基本上是浪费时间。

标签: asp.net sql-server entity-framework asp.net-mvc-2


【解决方案1】:

你不能用 ASP.NET Membership Provider 做这种事情,即写自定义更新到表。

如果就这么简单,那么会有更少的人遇到问题/问题。 =)

甚至不必费心将 ASP.NET 成员 SQL 表添加到您的 EDMX 中 - 您不会知道这些关系或这些表是如何真正协同工作的。忘记尝试将其表示为“模型”。

我的建议是不要尝试将 MembershipProvider 作为模型绑定(即不要创建强类型视图),只需直接从控制器调用 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");
}

上面的代码(大致)相当于传递一个强类型的 User 对象,更改密码并调用 UpdateModel。

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

【讨论】:

【解决方案2】:

使用默认提供程序执行此操作有点复杂,但更容易的是创建您自己的 CustomMembershipProvider,如下所述:

Implementing A Membership Provider

由于您可以对自己的 OWN 帐户模型执行此操作,因此您可以根据自己的选择对存储库/DAL 代码进行编码,并使用标准 EF 实践和约定,从而允许您执行简单且强映射的操作,例如 UpdateModel。

【讨论】:

  • 我想做的是编写自己的会员提供程序,但我不知道如何从那里更新我的 EF 实体。
  • 啊,先生,您需要什么。是 DAL 层或存储库,我强烈建议使用 Dane Morgridge 的这个示例,他提供了一个 T4 模板,只需将其放在与您的 EDMX 模型相同的文件夹中,然后运行,它将为您的模型生成一个数据存储库(或者至少是你可以定制的骨头)。 geekswithblogs.net/danemorgridge/Default.aspx
  • @Agares,编写您自己的成员资格提供程序与更新 EF 实体无关 - 这是一种标准的 EF 技术,只需环顾四周,您就会发现很多示例。
【解决方案3】:

类似的问题是asked here

这是一个 CodeProject 示例应用程序,可以帮助您开始使用 EF 和 Microsoft 的 MembershipProvider。他们构建了一个继承自 MembershipProvider 的类。
http://www.codeproject.com/KB/web-security/EFMembershipProvider.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多