【问题标题】:ASP.NET MVC identification tables creationASP.NET MVC 标识表创建
【发布时间】:2017-05-04 10:38:39
【问题描述】:

所以我有一个项目,其中包含我的自定义本地数据库(由模型优先方法创建)。我需要在那里创建标识表(例如asp_usersasp_roles,我不记得它们的确切名称,但我希望你明白了)。据我所知,它们应该在首次注册时创建,但不会发生:

我在 SQL Management Studio 中也看不到这些表。 我的连接字符串(使用 DB 自动创建):

<!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-WebApplication1-20170504122316.mdf;Initial Catalog=aspnet-WebApplication1-20170504122316;Integrated Security=True" providerName="System.Data.SqlClient" />-->

<add name="DefaultConnection" connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=VADIM-PC;initial catalog=PIT_3_Project_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

第一个连接字符串是真正默认的,第二个是我的。

有趣的部分是 - 身份验证工作正常,我可以注册和登录,而且我看不到我的代码可以在哪里使用默认的本地数据库。

UPD:抱歉,我没有更改此行:

    public ApplicationDbContext()
    : base("DBModelContainer", throwIfV1Schema: false)
    {
    }

我已将DBModelContainer 更改为DefaultConnection,现在我收到此错误(当我尝试注册时)

实体类型 ApplicationUser 不是当前上下文模型的一部分。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-identity


    【解决方案1】:

    您应该使用代码优先迁移来创建这些表。

    第一步: 取消注释第一个默认连接字符串,将其重命名为例如 DefaultAuthConnection 并像这样修改它(对于本地数据库)。

    <add name="DefaultAuthConnection" connectionString="data source=.;initial catalog=PIT_3_Project_DB;persist security info=True;" providerName="System.Data.SqlClient" />
    
    <add name="DefaultConnection" connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=VADIM-PC;initial catalog=PIT_3_Project_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    第二步:打开你的IdentityModels.cs并像这样修改ApplicationDBContext

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
        {
            public ApplicationDbContext()
                : base("DefaultAuthConnection", throwIfV1Schema: false)
            {
            }
        }
    

    第三步:打开Package Manager Console(查看->Other Windows->Package Manager Console)并编写如下步骤:

    1. 启用-迁移-ContextTypeName WebApplication1.ApplicationDbContext
    2. 添加迁移初始化
    3. 更新数据库

    从现在开始,您可以在本地数据库中查看身份验证表。

    【讨论】:

    • 在第 3 步遇到此错误The context type 'aspnet-WebApplication1.ApplicationDbContext' was not found in the assembly 'WebApplication1'.,第 1 点。
    • 它是您的应用程序名称。我写了一个例子。因此,如果您的应用程序名称是 WebApplication1,则可以使用“Enable-Migrations -ContextTypeName WebApplication1.ApplicationDbContext”。
    • 我的应用程序是 'WebApplication1' ,但我仍然不断收到此错误。
    • 在没有 '-ContextTypeName ...' 的情况下单独尝试 'Enable-Migrations'。它将为您提供两个可能的选项来启用迁移。之后,我们将选择一个与 DefaultAuthConnection 相关的。
    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多