如何让C#中ADO.NET Entity Framework不删除手动添加的数据库表?
解决ADO.NET Entity Framework中手动创建表被删除的问题
你的问题核心是EF的数据库初始化策略在每次运行时重建了数据库,导致手动添加的表被清除,下面是几种可行的解决方法:
1. 更换数据库初始化策略
默认如果用了DropCreateDatabaseAlways或DropCreateDatabaseIfModelChanges,EF会在模型变化或每次启动时删除并重建整个数据库,手动表自然会被删掉。你需要换成更温和的初始化策略:
仅在数据库不存在时创建:使用
CreateDatabaseIfNotExists,这是Code First的默认策略(如果没手动修改的话)。在你的DbContext类的构造函数里添加:public YourDbContext() : base("YourConnectionString") { Database.SetInitializer<YourDbContext>(new CreateDatabaseIfNotExists<YourDbContext>()); }完全禁用自动初始化:如果想完全掌控数据库结构,不想EF自动修改数据库,可以用
NullDatabaseInitializer:Database.SetInitializer<YourDbContext>(null);这种情况下EF只会读取现有数据库,不会做任何创建或修改操作。
2. 使用Code First迁移(推荐)
如果需要对模型变更做可控的更新,同时保留手动创建的表,启用Code First迁移是更好的选择:
- 打开Package Manager Console,执行命令启用迁移:
Enable-Migrations - 当模型变更后,创建迁移脚本:
Add-Migration YourMigrationName - 将迁移应用到数据库:
迁移只会处理你在代码中定义的实体对应的表,手动添加的表不会被迁移操作影响,EF也不会随意删除它们。Update-Database
3. 检查配置文件或启动代码
确认你的项目启动代码(比如ASP.NET的Global.asax.cs)里没有设置会重建数据库的初始化策略,比如之前提到的DropCreateDatabaseAlways,如果有就替换成上面的策略。
内容的提问来源于stack exchange,提问作者Milton
相关产品推荐
相关产品推荐

