我想使用实体框架+ ASP身份,但我不希望EF为我生成表

本文关键字:希望 EF 身份 实体 框架 ASP | 更新日期: 2023-09-27 18:10:35

我已经创建了新的ASP MVC 5应用程序(ASP身份)。
我用IdentityDbContext类把我所有的域对象放在里面。

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

当我第一次创建user时,所有的数据库表(标识表)都创建了,包括我的Country表。
但现在我在数据库中添加了新的表(创建从管理工作室),并添加在IdentityDbContext:

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

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

支持'SecurityContext'上下文的模型自数据库已创建。考虑使用代码优先迁移进行更新数据库。

如果我删除所有表并再次运行app, City将被创建,但我不想更灵活。
所以我想做的是,我可以创建所有的数据库表,并创建我的POCO类项目以后,所以我可以使用EF的数据访问。
我不想让EF为我创建类(我觉得单独连接这些东西更安全)。
另外(我知道这是可能的,但只是不知道如何)我可以防止asp Identity单独创建表?

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

我想使用实体框架+ ASP身份,但我不希望EF为我生成表

您可以关闭EF初始化器并自己管理表和映射。

像这样在构造函数中禁用数据库初始化器…

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

那么您就可以使用EF到目前为止创建的模式并自己管理它(您可以删除迁移历史表)。我建议使用SQL Server数据库项目,这样您就可以对模式进行源代码控制。当模式发生变化时,现在由您来更新DbContext。

也可以通过配置禁用

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