在Web Api 2中更改IdentityUser表的架构

时间:2014-04-06 20:43:59

标签: asp.net-mvc entity-framework asp.net-web-api asp.net-mvc-5 asp.net-web-api2

我正在使用Web Api 2.0和使用表单身份验证创建项目。我的问题是更改AspNet自动生成的表的默认模式名称。

例如;

dbo.AspNetUsers ---> User.AspNetUsers

我已经尝试使用ALTER SCHEMA查询在数据库中更改它们,我已将此模型添加到我的项目中

public class UserAccount:IdentityDbContext<IdentityUser>{
 .....
}

但是我遇到以下错误;

  

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

知道如何解决这个问题。或者我可以使用dbo

将默认架构从Owin更改为其他内容

2 个答案:

答案 0 :(得分:6)

我已经解决了这个问题,你可以看到我是怎么做到的

首先,我执行了以下查询

ALTER SCHEMA User TRANSFER dbo.AspNetUsers

以及其他相关表格。

在应用程序中,我添加了带有空表集的edmx文件,并引用了以下IdentityDbContext

public partial class LicaDatabaseEntities : IdentityDbContext<UserAccount>
{
    public LicaDatabaseEntities()
        : base("LicaDatabaseEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //throw new UnintentionalCodeFirstException();
        modelBuilder.HasDefaultSchema("User");
        base.OnModelCreating(modelBuilder);
    }

}
启动

中的

UserManagerFactory =
            () => new UserManager<UserAccount>(new UserStore<UserAccount>(new LicaDatabaseEntities()));

答案 1 :(得分:5)

我现在正在使用最新版本的OWIN和EF(2015-02-26) 我改变了一些东西,它使用“Membership”SQL Schema而不是“dbo”

0-我改变了connectionString的名字:

<connectionStrings>
    <clear/>
    <add name="MembershipConnection" connectionString="Server=.;Integrated Security=True;Database=AWU" providerName="System.Data.SqlClient" />
</connectionStrings>

1-1-我这样改变了IdentityModels.cs

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

1-2-我将此覆盖方法添加到IdentityModels.cs

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.HasDefaultSchema("Membership");
    base.OnModelCreating(modelBuilder);
}

2-我改变了EF使用SQL的方式,因为我的机器上安装了“MS-SQL 2014”

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
    <parameters>
        <parameter value="MembrshipConnection"/>
    </parameters>
</defaultConnectionFactory>

我认为最重要的部分是1-2,它告诉EF在创建SQL表时使用默认架构。我没有触及OWIN的Startup.cs