我想使用实体框架+ 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
表。我该怎么做呢?
您可以关闭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>