【问题标题】:MVC3 + EF4.1 Code First but using .NET Memebership - eh?MVC3 + EF4.1 Code First 但使用 .NET Memebership - 嗯?
【发布时间】:2011-09-06 15:29:03
【问题描述】:

我目前正在学习 MVC3、EF4.1,非常喜欢 Code First 方法。

但是,我想使用内置的 .NET Memembership Provider 和生成的 DB。

我无法解决的是如何编写我的域以链接到会员数据库,以及如何让数据库通过 EF 生成。我可以运行适当的脚本来生成数据库,但是这不起作用,而且真的感觉不对。

我不希望得到完整的答案,我只需要指出一个教程的方向,该教程解释了如何实现这一点。

如果唯一的答案是实现我自己的 Membership Provider,那么可以,但同样 - 考虑到 MVC 附带了一个开箱即用的实现,感觉就像很多不必要的工作?

问候,

韦恩

【问题讨论】:

  • Which DB... 您自己的会员自定义 DB 或您仍然可以通过从 Visual Studio 运行 Web 管理工具来管理用户来使用和创建的默认 DB
  • 祝你好运,更换会员的东西一直是我开始申请后的第一件事。
  • 我整理了一篇博文,希望能帮助人们开始使用 EF 编写代码:terric.co.uk/code-first-entity-framework-and-sql-migrations。关于会员提供程序,您应该能够使用内置提供程序,只需将连接字符串指向您生成的 EF 数据库。在域的 app.config(如果是类库)中有此连接,并使用相关的命名空间将 Microsoft 的身份验证引擎包含在您的域中。

标签: asp.net asp.net-mvc-3 asp.net-membership entity-framework-4.1


【解决方案1】:

如果您的成员资格表与域表位于不同的数据库中,则您不能在 EF 中使用单个 DbContext。您可以在这里做的是,您可以为每个数据库创建两个上下文,即 SecurityContext 和 DomainContext。但是您将无法通过加入驻留在每个上下文中的实体进行查询,并且在更新数据库时两个上下文不会使用相同的事务(即不是单个工作单元)。

我建议您在数据库中创建这些成员表,而不是在两个数据库中。然后您可以在此处使用单个 DbContext(如果它们完全独立,则可以使用事件 2)。在这里,如果您正确建模了所有表、列和关系,您可以使用 EF 生成完整的数据库。但是如果我没记错的话 SqlMembershipProvider 使用存储过程。如果是这样,您将很难创建整个数据库。

如果您可以提供更多信息,则更容易提供更具体的解决方案。

【讨论】:

    【解决方案2】:

    我所做的是使用 Microsoft 设置的规则创建自定义 MembershipProvider (http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx);但是,我首先使用模型,然后自己使用代码优先方法。我自己在设计器中创建了表格,然后以这种方式生成了我的数据库。在我的结构健全之后,我创建了 MembershipProvider,只实现我需要的功能,几乎为那些我不使用的功能抛出异常。

    如果这对您不起作用,那么您可以使用类似于@Eranga 答案中第 2 段的内容,但可能使用此处使用的数据库准备步骤:http://www.brianhawkinstech.com/development/120-preparing-your-ms-sql-database-for-use-with-aspnet-membership-provider。这也将创建 SqlMemberhipProvider 所需的存储过程。我知道它可以与数据库优先方法一起使用,但不确定它如何与代码优先方法一起使用。

    使用上面第 2 段中方法的复杂性是我使用自定义成员方法的原因。这种方法的一个好处是您可以在以后自己的项目中重用代码,但这当然是一种耗时的方法。

    【讨论】:

      【解决方案3】:

      如果您想实现自己的成员资格和角色提供者,我会推荐,那么这里有一个很棒的教程: http://www.brianlegg.com/post/2011/05/09/Implementing-your-own-RoleProvider-and-MembershipProvider-in-MVC-3.aspx

      【讨论】:

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