Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 将MVC4SimpleMembership与现有的数据库first EF模型一起使用_Asp.net Mvc 4_Entity Framework 5_Sql Server 2012_Simplemembership_Ef Database First - Fatal编程技术网

Asp.net mvc 4 将MVC4SimpleMembership与现有的数据库first EF模型一起使用

Asp.net mvc 4 将MVC4SimpleMembership与现有的数据库first EF模型一起使用,asp.net-mvc-4,entity-framework-5,sql-server-2012,simplemembership,ef-database-first,Asp.net Mvc 4,Entity Framework 5,Sql Server 2012,Simplemembership,Ef Database First,我第一次尝试在我的MVC4中使用SimpleMembership,我已经有了一个现有的数据库和基于它创建的EF5模型!我搜索了很多,但我找不到如何在我的案例中使用它,也找不到如何在我自己的模型下拥有一切 如果有人能告诉我怎么做就好了 谢谢在web.config的appSettings标签中,添加行 <add key="enableSimpleMembership" value="true"/> 在您的公共类AccountController上面:Controller 当您想要强制用

我第一次尝试在我的MVC4中使用SimpleMembership,我已经有了一个现有的数据库和基于它创建的EF5模型!我搜索了很多,但我找不到如何在我的案例中使用它,也找不到如何在我自己的模型下拥有一切

如果有人能告诉我怎么做就好了


谢谢

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

<add key="enableSimpleMembership" value="true"/>
在您的公共类AccountController上面:Controller

当您想要强制用户登录某个页面时,您可以在pages controller中写入该页面

[Authorize]
这些表将在数据库中自动生成。如果您想在这些表中添加更多字段,只需通过谷歌搜索即可


这里有一个链接以获取更多信息

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

如果查看
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);
        }
    }
}
需要注意的一些事项:

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

  • USER\u TABLE
    是数据库中用来保存额外用户信息的表,如名字、姓氏等。它通过USER\u ID\u字段链接到自动生成的表

  • USER\u ID\u字段通常是用户表的主键。它必须是
    int
    类型

  • USER\u ID\u NAME
    是用户的唯一名称,可以是电子邮件地址

  • autoCreateTables
    设置为
    true
    ,以确保创建SimpleMembership工作所需的表(如果它们不存在)

  • 当然,只有当您通过
    AccountController
    点击页面时,才会触发此代码,因为这是由属性修饰的。您可以在其中放置一个断点,并查看它的运行情况

    这应该让你开始-互联网应用程序模板是一个很好的模板遵循,如果你卡住了


    希望这能有所帮助。

    我按照你的指示做了,但是我从LazyInitializer那里得到了一个targetInvestment异常。有什么想法吗?我找到了:)SQL server防火墙是导致该错误的原因!我讨厌防火墙:)@UmutCanKöseali我想我也有同样的问题,你如何关闭sql防火墙?@Biplov13,你最终是如何让它正常运行的?我有一个azure sql数据库,ip范围基本上是受限的,我已经超出了范围。我只是添加我的当前IP。它起作用了
    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);
            }
        }
    }