c# - 如何处理实体框架模型而不丢失生产部署中的先前数据?
问题描述
最初我使用 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; }
}
}
LocalDB 的 App.config 中的连接字符串
<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,在数据库上重新创建。EF6 是否有可能在不删除、重新创建的情况下自动处理这样的基本模型更改?
解决方案
您正在使用 DropCreateDatabaseIfModelChanges 初始化上下文。顾名思义,如果模型发生更改,它会完全删除数据库并重新创建它。如果这不是所需的操作,您应该使用 CreateDatabaseIfNotExists 之类的东西来维护现有数据。
推荐阅读
- postgresql - 基于表值的 Postgresql 数据验证检查
- linux - 如何在启动 chromedriver 时修复“[严重]:绑定()失败:无法分配请求的地址(99)”
- c++ - 使用opencv提取视频
- amazon-ec2 - 配置 EC2 WAF ACL 时面临的问题
- git - 显示对曾经是 Line 的更改
- vb.net - 如何验证组合选择值(字符)范围
- xamarin - 当单击具有手势识别器的元素时,有没有一种方法可以向用户提供反馈?
- sql - 在 SAP HANA 中使用 PAL 的 APRIORI 函数时,为什么我的结果表没有显示任何结果?
- r - 删除增量时间内的重复事件
- c# - 如果我更改 Azure DevOps 代理,为什么我的 MSbuild 命令路径无法访问?