UserStore使用我自己的数据库

时间:2014-01-27 22:39:28

标签: c# asp.net sql-server entity-framework asp.net-web-api

我正在尝试使用自己的SQL Server数据库来存储用户权限。

我使用我的上下文初始化UserStore(我也尝试使用默认构造函数)

UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new DbEpicerieEntities()));

然后我创建了一个空数据库并为实体生成了数据模型。

然后我更改了我的连接的网络配置

<connectionStrings>
    <add name="DefaultConnection" connectionString="metadata=res://*/Models.EpicerieModel.csdl|res://*/Models.EpicerieModel.ssdl|res://*/Models.EpicerieModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost;initial catalog=DbEpicerie;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

但它不起作用。如果我在

之后尝试注册用户

IdentityResult result = await UserManager.CreateAsync(user);

它会调用

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
       UserManager.Dispose();
    }

    base.Dispose(disposing);
}

我尝试使用已经制作的表格的数据库,但我有相同的结果。

我尝试更改DefaultConnection的连接名称,但没有成功。

我尝试了question上的建议,并将DbContext更改为IdentityDbContext<IdentityUser>

public partial class DbEpicerieEntities : IdentityDbContext<IdentityUser>
    {
        public DbEpicerieEntities()
            : base("DefaultConnection")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

    }

但我有同样的问题。

我不知道Web配置中的EntityFramework设置是否可能是问题

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

为什么它不起作用的任何想法?

谢谢

2 个答案:

答案 0 :(得分:2)

使用以下连接字符串解决了我的问题:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=Epicerie;Integrated Security=True;" providerName="System.Data.SqlClient" />

答案 1 :(得分:1)

您可以发布 MyContext 课程吗?您可以尝试更改第一个代码段,以使用 DbEpicerieEntities 类而不是 MyContext 类。

UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new DbEpicerieEntities()));