Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 支持多个数据库管理系统;更新客户端数据库的最佳策略';更新过程中发生了什么?_C#_Asp.net_Entity Framework_C# 4.0 - Fatal编程技术网

C# 支持多个数据库管理系统;更新客户端数据库的最佳策略';更新过程中发生了什么?

C# 支持多个数据库管理系统;更新客户端数据库的最佳策略';更新过程中发生了什么?,c#,asp.net,entity-framework,c#-4.0,C#,Asp.net,Entity Framework,C# 4.0,我们的产品支持多个数据库。目前,我们支持FireBird和MSSql,Oracle未来也会得到支持 当我们推出产品更新时,我们还可能需要更新客户机的数据库模式 传统上,我们有适合DB版本的脚本,可以执行“ALTERTABLEADDCOLUMN”之类的操作,以便将数据库升级到正确的版本。这变得很麻烦,因为我们必须维护两组sql脚本(如果我们将Oracle添加到混合中,还会有更多的sql脚本) 我们在数据库层中使用实体框架。EF已包含数据库的架构。我想知道-是否有一种巧妙的方法来使用EF及其模式知识

我们的产品支持多个数据库。目前,我们支持FireBird和MSSql,Oracle未来也会得到支持

当我们推出产品更新时,我们还可能需要更新客户机的数据库模式

传统上,我们有适合DB版本的脚本,可以执行“ALTERTABLEADDCOLUMN”之类的操作,以便将数据库升级到正确的版本。这变得很麻烦,因为我们必须维护两组sql脚本(如果我们将Oracle添加到混合中,还会有更多的sql脚本)

我们在数据库层中使用实体框架。EF已包含数据库的架构。我想知道-是否有一种巧妙的方法来使用EF及其模式知识来处理对客户端数据库的更新

编辑-


这是EF 4.0

您没有提到您使用的是哪个版本的EF。在V4中,您可以使用“代码优先”模型。退房不过,我不能100%确定它是否能在您需要的所有DBs中得到支持。[edit]这将只创建新的架构,而不更新现有架构[/edit]


这可能需要一些工作,但可能值得切换到nHibernate,它支持更广泛的DBs并自动更新模式。

您没有提到您正在使用哪个版本的EF。在V4中,您可以使用“代码优先”模型。退房不过,我不能100%确定它是否能在您需要的所有DBs中得到支持。[edit]这将只创建新的架构,而不更新现有架构[/edit]


这可能需要一些工作,但可能值得切换到nHibernate,它支持更多种类的数据库并自动更新模式。

代码优先自动模式生成的问题是它不支持版本控制,它只是删除数据库并重新创建,我想他的客户不会希望这样。同样的情况也发生在fluent Nhibernate模式生成中,EF团队应该正在为下一个CTP开发一个迁移解决方案。我原以为EF4也会这么做,但我找不到任何东西在EF4上找到一个否定(官方):我会-1的。因为CODEST不处理任何重构机制——我认为所有.NET产品(包括VisualStudio)中的模式生成都是为了开发而不是为了生产使用。任何数据库端重构都是不可能的。代码优先自动模式生成的问题在于它不支持版本控制,它只是删除数据库并重新创建,我认为他的客户不会希望这样。同样的情况也发生在fluent Nhibernate模式生成中,EF团队应该正在为下一个CTP开发一个迁移解决方案。我原以为EF4也会这么做,但我找不到任何东西在EF4上找到一个否定(官方):我会-1的。因为CODEST不处理任何重构机制——我认为所有.NET产品(包括VisualStudio)中的模式生成都是为了开发而不是为了生产使用。任何数据库端重构都不可能使用它们。