c# - 如何在生产部署中处理 Entity Framework 模型而不丢失以前的数据?

标签 c# winforms entity-framework-6 localdb

最初,我使用 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/

相关文章:

c# - EF6 代码首先添加迁移创建异常迁移但应用程序运行

c# - nHibernate (w/CaSTLe ActiveRecord) with C# interfaces (esp for DTO's)

c# - 父角色如何跟踪子角色执行的子任务的状态

c# - 如何导航到 WPF 中的上一页但保留数据?

c# - 为什么在单元测试中实例化ListView时SelectedIndices和SelectedItems不起作用?

powershell - 在 Powershell 中,如何在成功复制文件后更改标签文本?

entity-framework - 如何在 Entity Framework 6中执行存储过程而不返回结果?

c# - 如何生成三个和为1的随机数?

c# - 如何修改另一个窗口的背景颜色?

ef-code-first - Entity Framework 在迁移前执行 SQL