将MVC 4 SimpleMembership与现有的数据库优先EF模型结合使用

时间:2013-02-27 12:31:47

标签: asp.net-mvc-4 entity-framework-5 sql-server-2012 simplemembership ef-database-first

我第一次尝试在我的MVC 4中使用SimpleMembership,我已经有了一个基于它的现有数据库和EF5模型!我搜索了很多,但我无法找到如何在我的情况下使用它,并在我自己的模型下拥有一切。

如果有人能让我知道如何做到这一点,那就太棒了。

谢谢

2 个答案:

答案 0 :(得分:16)

纯粹作为参考点,创建ASP.NET MVC 4 Web应用程序项目的新Internet应用程序模板(即通过File> New Project)可能是个好主意。

如果您查看AccountController,正如@ zms6445所说,它使用InitializeSimpleMembership属性进行修饰。您可以在根目录下Filters文件夹的InitializeSimpleMembershipAttribute.cs文件中找到此属性的实现。

在这里,这是谜题的缺失部分 - 您需要连接现有数据库,以便SimpleMembershipProvider使用它。这是您需要的代码:

private class SimpleMembershipInitializer
{
    public SimpleMembershipInitializer()
    {
        try
        {
            if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
            }
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException("Something is wrong", ex);
        }
    }
}

有些注意事项:

  1. CONNECTION_STRING_NAME是您的web.config ConnectionStrings中的一个条目 - 您不能在此处使用模型连接字符串 - SimpleMembershipProvider无法识别该格式!您需要指定System.Data.SqlClient连接字符串,例如

    < add name =“CONNECTION_STRING_NAME”connectionString =“data source = SERVER; initial catalog = DATABASE; user id = USER; password = PASSWORD;” providerName =“System.Data.SqlClient”/>

  2. USER_TABLE是数据库中用于保存额外用户信息的表,例如名字,姓氏等。它通过USER_ID_FIELD链接到自动生成的表。

  3. USER_ID_FIELD通常是Users表的主键。它必须是int类型。

  4. USER_ID_NAME是用户的唯一名称,可以是电子邮件地址。

  5. autoCreateTables设置为true,以确保创建SimpleMembership所需的表格(如果它们尚不存在)。

  6. 当然,如果您通过AccountController点击某个页面,此代码才会被触发,因为它已由该属性修饰。你可以在那里放一个断点并看看它的实际效果。

    这应该可以帮助您入门 - 如果您遇到问题,Internet应用程序模板是一个非常好的模板。

    希望这有帮助。

答案 1 :(得分:3)

在appSettings标记的web.config中,添加行

<add key="enableSimpleMembership" value="true"/>

SimpleMembership是内置的,所以你只需要编写

[InitializeSimpleMembership]

在你的公共类AccountController上面:Controller

如果您想强制用户登录您在页面控制器中写入的某个页面

[Authorize]

这些表将在您的数据库中自动生成。如果您想为这些表添加更多字段,您只需简单地谷歌即可。

以下是有关详情http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx

的链接