相同dll和EF的不同版本。

时间:2014-10-25 18:48:06

标签: c# .net linq entity-framework dll

我们有几个项目将业务系统集成到不同的外部服务。 “我们”只编写中间件,无法控制任何一个系统。当新版本发生重大变化时,我们必须以某种方式应对。

我们使用的环境是VS2013,C#和EF 5.0-6.NN

我们依赖的资源是:  许多实体框架模型(现在是模型,但可能会发生变化)。  3个需要引用的dll。

直到星期五,当我们对其中一个dll中的一个字段的数据类型进行了重大更改时,资源一直非常向后兼容。 (从int到string)。

如何做到这一点: 是否可以加载针对不同版本数据库的相同EF? 我知道有人会被不同的dll加载它们:s等等, 但是,如何处理说linq查询等等?

热点是否可行检查类型并重新创建整个LINQ表达式?

if(typeof(Items.Prop) == typeof(int)){
  var things = from x in framework.Items where x.Prop = 2 select x;
} else if(typeof(Items) == typeof(string)){
  var things = from x in framework.Items where x.Prop = "2" select x;
}

尽管如此,取决于linq表达式评估,这应该会失败,因为我们将它与错误的数据类型进行比较。

或者应该使用

为每个版本的资源创建特定的可执行文件
#ifdef __VER10
  var things = from x in framework.Items where x.Prop = 2 select x;
#endif
#ifdef __VER9
  var things = from x in framework.Items where x.Prop = "2" select x;
#endif

但是,是否可以使用Visual Studio提供的自动化工具。并且正确的可执行文件的部署本身就成了问题。

这个问题对于堆栈溢出来说可能太松了,我认为这是一个常见问题,但我不确定如何谷歌寻求答案。

1 个答案:

答案 0 :(得分:1)

您应始终为不同版本的API /资源提供特定的可执行文件 您无法使用Visual Studio实际自动化它,但您可以使用Configuration Manager创建不同的构建配置 请参阅此处有关如何调整参考文献的信息:Visual Studio: Different DLLs for configurations
然后,您可以转到Project-> Properties-> Build->条件配置符号,指定__VER9__VER10等构建变量。
这里简要解释了这些符号,但它基本上就是您要找的:http://msdn.microsoft.com/en-us/library/aa691095(v=vs.71).aspx