最初,我使用 EF 6 代码优先方法在 LocalDB(基于服务的数据库)中创建表。代码是:
namespace WindowsFormsApp2
{
public class MyDBContext : DbContext
{
public MyDBContext() : base("name=strCon")
{
AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));
Database.SetInitializer<MyDBContext>(new DropCreateDatabaseIfModelChanges<MyDBContext>());
//Database.SetInitializer<MyDBContext>(null);
//Database.SetInitializer<MyDBContext>(new CreateDatabaseIfNotExists<MyDBContext>());
}
public DbSet<Assets> Assets { get; set; }
}
}
App.config 中 LocalDB 的连接字符串
<connectionStrings>
<add name="strCon" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\AppDB.mdf;Integrated Security=True;Connect Timeout=30" providerName="System.Data.SqlClient" />
</connectionStrings>
我的目标是在客户端计算机上部署(发布)最新的模型更改,而不会丢失表中以前的数据。数据库迁移应以编程方式执行。但是数据库初始化程序 DropCreateDatabaseIfModelChanges
正在数据库上进行 DELETE、RECREATING。
有没有可能 EF6 仍然无法自动处理这样的基本模型更改而无需删除、重新创建?
最佳答案
您正在使用 DropCreateDatabaseIfModelChanges 初始化您的上下文。顾名思义,如果模型发生更改,它将完全删除数据库并重新创建它。如果这不是所需的操作,您应该使用类似 CreateDatabaseIfNotExists 的方法来维护现有数据。
关于c# - 如何在生产部署中处理 Entity Framework 模型而不丢失以前的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68469436/