我想使用Entity Framework + ASP Identity,但我不希望EF为我生成表格

时间:2014-06-28 14:19:31

标签: c# asp.net entity-framework entity-framework-6 asp.net-identity

我创建了新的ASP MVC 5应用程序(带有asp身份) 我使用IdentityDbContext类将所有域对象放入其中。

public class SecurityContext : IdentityDbContext{
...
public DbSet<Country> Countries { get; set; }

当我第一次创建用户时,创建了所有数据库表(身份表),包括我的Country表 但是现在我在数据库中添加了新表(从Management Studio创建)并添加到IdentityDbContext中:

public DbSet<City> Cities { get; set; }

但是当我现在运行应用程序时,我收到错误:

  

支持'SecurityContext'上下文的模型自从以来发生了变化   数据库已创建。考虑使用Code First Migrations进行更新   数据库。

如果我删除所有表格并再次运行应用程序City将被创建但我不会更灵活。
所以我想要做的是我可以创建所有数据库表并在以后的项目中创建我的POCO类,这样我就可以使用EF进行数据访问。
我不希望EF为我创建课程(单独连接这些东西时感觉更安全)。
另外(我知道这是可能的但只是不知道如何)我可以阻止asp Identity单独创建表吗?

总结整个问题。我想使用EF,但我想自己创建我的数据库,包括Identity表。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

您可以关闭EF初始化程序并自行管理表格和映射。

在构造函数中禁用数据库初始化程序,如下所示......

public SecurityContext()
    : base("DefaultConnection")
{
    Database.SetInitializer<SecurityContext>(null);
}

然后,您可以采用EF目前创建的架构并自行管理(您可以删除迁移历史记录表)。我建议使用SQL Server数据库项目,以便您可以控制您的架构。现在,您可以在架构更改时更新DbContext。

答案 1 :(得分:0)

您也可以通过配置

禁用它
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>    
    <add key="DatabaseInitializerForType YourNameSpace.SecurityContext, YourLibraryName" value="Disabled" />
    </appSettings>
</configuration>