C# ClickOnce更新并首先显示实体框架代码
如果我构建一个应用程序,让代码首先确定数据库的放置位置,并且用户通过应用程序插入数据,那么在单击一次更新时,这些数据会丢失吗?如果是,我如何处理这个问题 谢谢不,使用自动迁移时不需要“丢失”任何数据。 迁移配置类应声明不允许数据丢失 在处理导致数据丢失的更改时,需要构建自定义脚本或调整生成的脚本C# ClickOnce更新并首先显示实体框架代码,c#,entity-framework,clickonce,C#,Entity Framework,Clickonce,如果我构建一个应用程序,让代码首先确定数据库的放置位置,并且用户通过应用程序插入数据,那么在单击一次更新时,这些数据会丢失吗?如果是,我如何处理这个问题 谢谢不,使用自动迁移时不需要“丢失”任何数据。 迁移配置类应声明不允许数据丢失 在处理导致数据丢失的更改时,需要构建自定义脚本或调整生成的脚本 public override void MigrateDb() { Database.SetInitializer(new MigrateDatabaseToLatestVersion
public override void MigrateDb() {
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MYDbContext, MYSECIALMigrationConfiguration>());
// Context = GetDefaultContext(); // check if a new context is really needed here
Context.Database.Initialize(true);
}
public class MYSPECIALMigrationConfiguration : MYBaseMigrationConfiguration<MYDbContext>{ }
public abstract class MYBaseMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext>
where TContext : DbContext{
protected MYBaseMigrationConfiguration() {
AutomaticMigrationsEnabled = true; // you can still chnage this later if you do so before triggering Update
AutomaticMigrationDataLossAllowed = true; // you can still chnage this later if you do so before triggering Update
}
public override void MigrateDb(){
SetInitializer(新的MigrateDatabaseToLatestVersion());
//Context=GetDefaultContext();//检查此处是否确实需要新的上下文
Context.Database.Initialize(true);
}
公共类MYSPECIALMigrationConfiguration:MYBaseMigrationConfiguration{}
公共抽象类MYBaseMigrationConfiguration:DbMigrationsConfiguration
其中TContext:DbContext{
受保护的MYBaseMigrationConfiguration(){
AutomaticMiggerationsEnabled=true;//如果在触发更新之前这样做,您以后仍然可以对此进行更改
AutomaticMigrationDataLossAllowed=true;//如果您在触发更新之前这样做,以后仍然可以对此进行更改
}
如何进行迁移
这确实是个大问题
这涵盖了许多您可能认识到的情况,从而帮助您了解什么方法最适合您。不,使用自动迁移时不需要“丢失”任何数据。 迁移配置类应声明不允许数据丢失 在处理导致数据丢失的更改时,需要构建自定义脚本或调整生成的脚本
public override void MigrateDb() {
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MYDbContext, MYSECIALMigrationConfiguration>());
// Context = GetDefaultContext(); // check if a new context is really needed here
Context.Database.Initialize(true);
}
public class MYSPECIALMigrationConfiguration : MYBaseMigrationConfiguration<MYDbContext>{ }
public abstract class MYBaseMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext>
where TContext : DbContext{
protected MYBaseMigrationConfiguration() {
AutomaticMigrationsEnabled = true; // you can still chnage this later if you do so before triggering Update
AutomaticMigrationDataLossAllowed = true; // you can still chnage this later if you do so before triggering Update
}
public override void MigrateDb(){
SetInitializer(新的MigrateDatabaseToLatestVersion());
//Context=GetDefaultContext();//检查此处是否确实需要新的上下文
Context.Database.Initialize(true);
}
公共类MYSPECIALMigrationConfiguration:MYBaseMigrationConfiguration{}
公共抽象类MYBaseMigrationConfiguration:DbMigrationsConfiguration
其中TContext:DbContext{
受保护的MYBaseMigrationConfiguration(){
AutomaticMiggerationsEnabled=true;//如果在触发更新之前这样做,您以后仍然可以对此进行更改
AutomaticMigrationDataLossAllowed=true;//如果您在触发更新之前这样做,以后仍然可以对此进行更改
}
如何进行迁移
这确实是个大问题
这涵盖了许多您可能认识到的情况,从而帮助您了解什么方法最适合您。不,使用自动迁移时不需要“丢失”任何数据。 迁移配置类应声明不允许数据丢失 在处理导致数据丢失的更改时,需要构建自定义脚本或调整生成的脚本
public override void MigrateDb() {
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MYDbContext, MYSECIALMigrationConfiguration>());
// Context = GetDefaultContext(); // check if a new context is really needed here
Context.Database.Initialize(true);
}
public class MYSPECIALMigrationConfiguration : MYBaseMigrationConfiguration<MYDbContext>{ }
public abstract class MYBaseMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext>
where TContext : DbContext{
protected MYBaseMigrationConfiguration() {
AutomaticMigrationsEnabled = true; // you can still chnage this later if you do so before triggering Update
AutomaticMigrationDataLossAllowed = true; // you can still chnage this later if you do so before triggering Update
}
public override void MigrateDb(){
SetInitializer(新的MigrateDatabaseToLatestVersion());
//Context=GetDefaultContext();//检查此处是否确实需要新的上下文
Context.Database.Initialize(true);
}
公共类MYSPECIALMigrationConfiguration:MYBaseMigrationConfiguration{}
公共抽象类MYBaseMigrationConfiguration:DbMigrationsConfiguration
其中TContext:DbContext{
受保护的MYBaseMigrationConfiguration(){
AutomaticMiggerationsEnabled=true;//如果在触发更新之前这样做,您以后仍然可以对此进行更改
AutomaticMigrationDataLossAllowed=true;//如果您在触发更新之前这样做,以后仍然可以对此进行更改
}
如何进行迁移
这确实是个大问题
这涵盖了许多您可能认识到的情况,从而帮助您了解什么方法最适合您。不,使用自动迁移时不需要“丢失”任何数据。 迁移配置类应声明不允许数据丢失 在处理导致数据丢失的更改时,需要构建自定义脚本或调整生成的脚本
public override void MigrateDb() {
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MYDbContext, MYSECIALMigrationConfiguration>());
// Context = GetDefaultContext(); // check if a new context is really needed here
Context.Database.Initialize(true);
}
public class MYSPECIALMigrationConfiguration : MYBaseMigrationConfiguration<MYDbContext>{ }
public abstract class MYBaseMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext>
where TContext : DbContext{
protected MYBaseMigrationConfiguration() {
AutomaticMigrationsEnabled = true; // you can still chnage this later if you do so before triggering Update
AutomaticMigrationDataLossAllowed = true; // you can still chnage this later if you do so before triggering Update
}
public override void MigrateDb(){
SetInitializer(新的MigrateDatabaseToLatestVersion());
//Context=GetDefaultContext();//检查此处是否确实需要新的上下文
Context.Database.Initialize(true);
}
公共类MYSPECIALMigrationConfiguration:MYBaseMigrationConfiguration{}
公共抽象类MYBaseMigrationConfiguration:DbMigrationsConfiguration
其中TContext:DbContext{
受保护的MYBaseMigrationConfiguration(){
AutomaticMiggerationsEnabled=true;//如果在触发更新之前这样做,您以后仍然可以对此进行更改
AutomaticMigrationDataLossAllowed=true;//如果您在触发更新之前这样做,以后仍然可以对此进行更改
}
如何进行迁移
这确实是个大问题
这涵盖了许多您可能认识到的场景,从而帮助您了解什么方法最适合您。如果您正确设置了EF迁移,那么在更新过程中不会丢失任何数据。我以前在开发阶段使用过EF迁移。可以在我的场景中使用(发布后)吗?是的,如果您正在对代码进行更改,那么迁移将使您的模型和数据库保持同步。进行一些更改可能会比较困难,因为在部署后,您希望将
自动迁移datalossallowed
设置为false
,但它仍然可以工作。请看phil的回答。每个用户都有一个紧凑的sql服务器文件,因此每个单独的安装都将有自己的本地数据库。在这种情况下的迁移中有任何注意事项吗?感谢所有的输入。如果您正确设置了EF迁移,则在更新过程中不会丢失任何数据。我使用了EF