我正在使用DB First和EF ..我的数据库已经存在,所以我跟着this post ...特别是臭的答案。
我已将表格编写到我现有的数据库中。
所以现在在web.config
我有这个:
<connectionStrings>
<!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-test-20170522025552.mdf;Initial Catalog=aspnet-test-20170522025552;Integrated Security=True" providerName="System.Data.SqlClient" />-->
<add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<appSettings>
因此,创建此应用程序时附带的初始连接字符串DefaultConnection
现已注释掉。
在我的IdenityModel.cs中,我现在有了这个:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("FakeExistingDBConnectionString", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
当我尝试注册用户时......我明白了:
实体类型ApplicationUser不是当前上下文的模型的一部分。
为了清楚起见..我现有的数据库确实包含aspnetroles
,aspnetuserclaims
,aspnetuserlogins
,aspnetuserroles
,aspnetusers
表格。
我该如何解决这个问题?
更新
整个连接字符串:
<add name="DatabaseNameEntities" connectionString="metadata=res://*/Models.EntityDataModelName.csdl|res://*/Models.EntityDataModelName.ssdl|res://*/Models.EntityDataModelName.msl;provider=System.Data.SqlClient;provider connection string="data source=serverName;initial catalog=databaseName;user id=fake_user;password=fakePassword;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
更新2
将此连接字符串添加到web.config:
<add name="NameConnString" connectionString="data source=serverName;initial catalog=databaseName;user id=fake_user;password=fakePassword;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
然后在我的IdentityModel ..
public ApplicationDbContext()
: base("NameConnString", throwIfV1Schema: false)
{
}
答案 0 :(得分:2)
假设这是您的EF EDMX连接字符串:
<add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
上面的连接字符串很可能会触发问题,因为生成的连接字符串使用EntityClient
而不是SqlClient
提供程序,而EF需要这些提供程序与数据源进行通信。请注意,您需要包含以ASP .NET身份表创建的数据库为目标的标准SQL Server connection string。
因此,您的数据库连接字符串的正确设置应如下所示:
<connectionStrings>
<add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
EDMX的另一个连接字符串:
<connectionStrings>
<add name="FakeExistingDBConnectionEntities" connectionString="metadata=res://*/Models.ModelName.csdl|res://*/Models.ModelName.ssdl|res://*/Models.ModelName.msl;provider=System.Data.SqlClient;provider connection string="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
此外,ApplicationDbContext
中引用的连接字符串应引用SqlClient
提供者连接字符串:
public ApplicationDbContext()
: base("FakeExistingDBConnectionString", throwIfV1Schema: false)
{
}
然后,更新EDMX并确保您可以管理用户(创建,登录,更新,密码重置等)。
类似问题: