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