我正在使用Web Api 2.0和使用表单身份验证创建项目。我的问题是更改AspNet自动生成的表的默认模式名称。
例如;
dbo.AspNetUsers ---> User.AspNetUsers
我已经尝试使用ALTER SCHEMA查询在数据库中更改它们,我已将此模型添加到我的项目中
public class UserAccount:IdentityDbContext<IdentityUser>{
.....
}
但是我遇到以下错误;
实体类型
UserAccount
不是当前上下文模型的一部分
知道如何解决这个问题。或者我可以使用dbo
Owin
更改为其他内容
答案 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