Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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/6/entity-framework/4.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# 如何对不同版本的.NET只拥有一个项目?_C#_Entity Framework - Fatal编程技术网

C# 如何对不同版本的.NET只拥有一个项目?

C# 如何对不同版本的.NET只拥有一个项目?,c#,entity-framework,C#,Entity Framework,嗯,我有一个项目,目前我正在使用.NET 4.0,因为我希望这个应用程序与windows XP兼容,因为EF 5.0仅适用于windows 7及更高版本 但是,我想用.NET4.5的特性实现应用程序的某些部分,例如EF5.0 因此,对于我的数据库访问,我有一个reposotry类,现在使用EF 4.0,这是一个独立的dll,因此我可以创建其他使用EF 5的存储库dll,并在我的项目中导入两个dll,然后根据我可以使用的EF 5.0版本实例化正确的存储库。这是配置文件中的参数。这是最好的方式吗 我

嗯,我有一个项目,目前我正在使用.NET 4.0,因为我希望这个应用程序与windows XP兼容,因为EF 5.0仅适用于windows 7及更高版本

但是,我想用.NET4.5的特性实现应用程序的某些部分,例如EF5.0

因此,对于我的数据库访问,我有一个reposotry类,现在使用EF 4.0,这是一个独立的dll,因此我可以创建其他使用EF 5的存储库dll,并在我的项目中导入两个dll,然后根据我可以使用的EF 5.0版本实例化正确的存储库。这是配置文件中的参数。这是最好的方式吗

我问这个问题是因为我不知道我必须在哪里声明我的接口。因为我的存储库类需要实现这个接口,但是这将我的DLL绑定到我的应用程序,但是我需要在两个不同的应用程序中使用这个存储库,所以我想实现一次,并在许多应用程序中使用。我想要独立的DLL,因为现在有两个应用程序,但将来可以更多

希望在使用存储库的应用程序中使用接口的原因是,我希望在运行时根据配置文件设置实例化正确的存储库。因此,在未来,我可以实现新的存储库,而无需更改代码

EDIT1:我读过关于多目标的文章,但是如果在我的项目中我使用了一些功能,例如.NET 4.0,并且我想比较3.5,我会得到一个错误,因为3.5中不存在这个功能。没错。那么唯一的办法就是维持两个不同的项目?这将是一项双重工作

谢谢。 戴姆洛克

所以对于我的数据库访问,我有一个reposotry类,现在使用EF 这是一个独立的dll,因此我可以创建其他使用EF 5的存储库dll,并在我的项目中导入这两个dll,然后我可以 根据EF 5.0的版本实例化正确的存储库 我可以用。这是配置文件中的参数。是这个吗 最好的办法

你可以走这条路,我不认为这有什么问题,除非你认为这会在将来引起维护/开发方面的麻烦。你还可以考虑做一些其他事情。我认为两者都是完全正确的,可能只是个人的意见/偏好

  • 模块您可以采用模块化的方式,在这种方式下,存储库DLL可能会动态加载。调查这应该允许您在每个存储库DLL中创建IModule,以便根据需要设置应用程序。然后只需创建一个UnityBootTrapper类,告诉它如何查找模块(手动添加模块、查找目录等)。这应该允许您热交换存储库DLL,如果不想,您不必担心设置配置文件
  • 预处理器指令使用预处理器指令,您可以定义代码的编译方式。根据您的类的结构,这可能是一个相当简单的设置,或者是一个让您想要抽象和重构类的噩梦。这个问题:根据目标框架处理不同的编译结果。但就我个人而言,我喜欢模块化路线
  • 我问这个问题是因为我不知道我必须在哪里声明我的接口。 因为我的存储库类需要实现这个接口,但是 然后这将我的DLL绑定到我的应用程序,但我需要使用它 存储库位于两个不同的应用程序中,因此我想实现 一次,并在许多应用中使用。我想要独立的DLL,因为 现在有两个应用程序,但将来可以更多

    希望在使用的应用程序中使用接口的原因 存储库是因为我想在运行时实例化 根据配置文件设置更正存储库。那么在 fututre I可以实现新的存储库,无需 更改代码

    听起来您需要创建另一个库,用于在UI和存储库库之间进行通信。这可能是一个有点棘手和压倒性的设置恰到好处。基本上,您希望网关DLL容纳接口和业务对象。您的应用程序将引用此DLL,此DLL将引用您的存储库

    根据您的需要,您可能实际上需要设置另一个中间DLL,该DLL实际上只包含您的接口和最基本的实用程序类。这将允许您让EF对象实现应用程序正在使用的相同接口,而无需网关DLL来回映射您的业务对象和EF对象

    EDIT1:我读过关于多重目标的文章,但是如果在我的项目中我使用 例如.NET4.0和我想比较3.5的功能,我得到 错误,因为此功能在3.5中不存在。没错。 那么唯一的办法就是维持两个不同的项目?这将是一场灾难 双重工作

    我相信您可以通过使用上面提到的预处理器指令来解决这个问题。下面只是一个示例,说明如何根据框架是否为.NET2.0,使方法句柄的工作方式有所不同;这只是一个例子,没有经过测试。需要设置DefineConstants,但这应该允许您为多个框架目标处理一个项目,同时还可以在发布新的.NET功能时使用它们

    public Person FindPersonByName(List<Person> people, string name)
    {
    #if DOTNET_20
        foreach(Person person in people)
        {
            if (person.Name == name)
                return person;
        }
        return null;
    #else
        return people.FirstOrDefault(p => p.Name == name);
    #endif
    }
    
    public Person FindPersonByName(列出人员,字符串名称)
    {
    #如果DOTNET_20
    foreach(人对人)
    {
    if(person.Name==Name)
    返回人;
    }
    返回null;
    #否则
    返回people.FirstOrDefault(p=>p.Name==Name);
    #恩迪夫
    }
    
    我希望这对找到正确的解决方案有所帮助,并祝你好运

    所以对于我的数据库访问,我有一个repostory c