【问题标题】:Change schema of IdentityUser Tables in Web Api 2在 Web Api 2 中更改 IdentityUser 表的架构
【发布时间】:2014-05-18 22:48:11
【问题描述】:

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

例如;

dbo.AspNetUsers ---> User.AspNetUsers

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

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

但是我得到了以下错误;

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

知道如何解决这个问题。或者我可以使用Owin 将默认架构从dbo 更改为其他内容

【问题讨论】:

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


    【解决方案1】:

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

    首先我执行了以下查询

    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()));
    

    【讨论】:

    • 有效!谢谢。
    【解决方案2】:

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

    0- 我更改了连接字符串的名称:

    <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

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多