Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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# 在SQL Server上以编程方式查找和应用架构差异_C#_Sql_Schema_Diff_Smo - Fatal编程技术网

C# 在SQL Server上以编程方式查找和应用架构差异

C# 在SQL Server上以编程方式查找和应用架构差异,c#,sql,schema,diff,smo,C#,Sql,Schema,Diff,Smo,我有一个目前正在创作的产品,其后端依赖SQL server。我试图解决的一个问题是改进“升级”故事。因此,v1将有一个特定的模式,v2可能包括对该模式的一些增强—新表和新列 我知道RedGate和ApexSQL中的SDK,但希望避免 我已经通读了SMO文档,但我对它还不熟悉,很难确定这是否适用于这种情况。理想情况下,我希望这能使这个程序化的SMO或其他——基本情况看起来足够直截了当,但如果我能帮助的话,我真的不想重新发明轮子。是否有人有过类似的需求经验或关于我如何处理的想法?可能不完全是您想要的

我有一个目前正在创作的产品,其后端依赖SQL server。我试图解决的一个问题是改进“升级”故事。因此,v1将有一个特定的模式,v2可能包括对该模式的一些增强—新表和新列

我知道RedGate和ApexSQL中的SDK,但希望避免


我已经通读了SMO文档,但我对它还不熟悉,很难确定这是否适用于这种情况。理想情况下,我希望这能使这个程序化的SMO或其他——基本情况看起来足够直截了当,但如果我能帮助的话,我真的不想重新发明轮子。是否有人有过类似的需求经验或关于我如何处理的想法?

可能不完全是您想要的,因为它不是SMO,但了解一下实体框架代码优先迁移可能会帮助您:


模型类中的更改可以进行版本控制,并且可以直接应用于数据库,或者,如果您不能直接访问数据库,您可以为新版本生成SQL代码并将其交给数据库管理员。

可能不是您想要的,因为它不是SMO,但查看实体框架代码第一次迁移可能会帮助您:


模型类中的更改可以进行版本控制,并且可以直接应用于数据库,或者,如果您没有直接访问数据库的权限,可以为新版本生成SQL代码并将其交给数据库管理员。

您没有说您使用的SQL Server的版本,但我认为在2005年及以后,有数据库触发器的概念。它们的工作方式与表级类似,但可用于跟踪数据库上发生的任何类型的DDL更改。我们并没有使用它来实际生成DDL——当表的格式发生变化时,需要跟踪更多的数据。虽然你想要的应该是可能的,我想


触发器是划分开发人员的因素之一。有些人认为它们是自切片面包以来最好的东西,而另一些人则对它们恨之入骨。可能是因为当数据发生变化时,这些是您最不想做的事情。

您没有说您使用的是哪个版本的SQL Server,但我认为在2005年及以后,有数据库触发器的概念。它们的工作方式与表级类似,但可用于跟踪数据库上发生的任何类型的DDL更改。我们并没有使用它来实际生成DDL——当表的格式发生变化时,需要跟踪更多的数据。虽然你想要的应该是可能的,我想


触发器是划分开发人员的因素之一。有些人认为它们是自切片面包以来最好的东西,而另一些人则对它们恨之入骨。可能是因为当数据发生更改时,这些是您最后考虑的事情。

我在Visual Studio中使用数据库项目来管理模式的版本控制。在数据库项目中创建基线后,可以在项目中进行更改,然后使用模式比较来创建SQL脚本,以便在不同的环境中应用更改

我建议只做附加的更改,但它会为破坏性的更改生成更改脚本。如果没有同步环境,我强烈建议为每个环境生成一个新脚本

这篇博文介绍了如何在Visual Studio 2012中创建一个:


RedGate也有一个模式比较产品,但我还没有真正使用过它。

我在VisualStudio中使用了一些数据库项目来管理模式的版本控制。在数据库项目中创建基线后,可以在项目中进行更改,然后使用模式比较来创建SQL脚本,以便在不同的环境中应用更改

我建议只做附加的更改,但它会为破坏性的更改生成更改脚本。如果没有同步环境,我强烈建议为每个环境生成一个新脚本

这篇博文介绍了如何在Visual Studio 2012中创建一个:


RedGate也有一个模式比较产品,但我还没有真正使用过它。

我先使用EF代码-所以会检查CF迁移-谢谢链接。我先使用EF代码-所以会检查CF迁移-谢谢链接。您描述的有趣方法,我过去有过触发器的经验,我对他们很好,我意识到我没有具体说明我使用的是EF,所以我不确定它是否适用于我的情况——如果至少对类似的情况没有用处的话。这是一个有趣的旁白。如果我冒昧猜测一下,我怀疑EF会以类似于您在SSMS GUI中进行更改时的方式生成DDL。但我不会拿我的房子打赌…:你描述的方法很有趣,我过去有使用触发器的经验,我对它们很好,我意识到我没有指定我使用的是EF,所以我不确定它在我的环境中是否有效
案例——如果不是至少对类似案例有用的话。这是一个有趣的旁白。如果我冒昧猜测一下,我怀疑EF会以类似于您在SSMS GUI中进行更改时的方式生成DDL。但我不会拿我的房子打赌…: