Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.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#_Azure_Visual Studio 2013_Dependencies_Circular Dependency - Fatal编程技术网

C# 继承代码基中的循环依赖项

C# 继承代码基中的循环依赖项,c#,azure,visual-studio-2013,dependencies,circular-dependency,C#,Azure,Visual Studio 2013,Dependencies,Circular Dependency,我仍然在学习如何构建更大的代码库(一年前,我在学习时只处理了3/4小项目的解决方案),我一直在尝试组织一个继承的代码库,以消除循环依赖性问题 基本上,我有一个由SQL数据库支持的MVC门户项目,该数据库是使用实体框架的代码优先。我还有一个存储库项目,它处理与一些Azure表的通信。这些表中的数据有些重叠,但Azure表不包含来自Portal db的很多信息 当我创建某些实体时,问题就出现了,解决方案要求在门户数据库(以便用户可以看到他们的信息)以及这些Azure表中创建实体,解决方案的其余部分将

我仍然在学习如何构建更大的代码库(一年前,我在学习时只处理了3/4小项目的解决方案),我一直在尝试组织一个继承的代码库,以消除循环依赖性问题

基本上,我有一个由SQL数据库支持的MVC门户项目,该数据库是使用实体框架的代码优先。我还有一个存储库项目,它处理与一些Azure表的通信。这些表中的数据有些重叠,但Azure表不包含来自Portal db的很多信息

当我创建某些实体时,问题就出现了,解决方案要求在门户数据库(以便用户可以看到他们的信息)以及这些Azure表中创建实体,解决方案的其余部分将这些实体用于其他目的

因此,门户将数据持久化到两者,这意味着我需要在我的MVC项目中使用存储库项目,但我还需要我的存储库项目能够访问MVC项目以获取一些未持久化到Azure表的外围信息

这显然是一个糟糕的设计,但从结构上来说,有没有一种方法可以避免对Azure表结构进行重大重构或更改,以包含门户数据库的每一个细节

我提出的每一个“简单的解决方案”都不是解决方案,只会让圆圈变大,哈哈。设计中的这两张表让我很困惑,因为我继承了这张表

编辑以提高清晰度

我的存储库引用MVC项目,以便使用ApplicationDbContext与Portal db通信。据我所知,这是不容易分离到另一个项目。 我的MVC项目引用存储库以在Azure表中存储信息。这需要保持现状

我想问题是存储库做的太多了。我开始觉得我应该把它们分开,尽管这是相当大的返工

JK

将MVC项目中的“外围信息”提取到MVC和存储库项目都可以引用的另一个新项目,并从存储库项目中删除对MVC项目的引用

编辑:澄清:当前您有此圆圈:

MVC -> Repository -> MVC
您声明存储库需要在MVC中提取一些“外围信息”。所以,将这些“外围信息”放到另一个项目中,我们称之为PI,并从存储库中删除对MVC的引用(因为存储库需要的所有外部信息现在都在PI中,而不是MVC中)。这打破了循环。这将为您提供:

MVC -> Repository
MVC -> PI
Repository -> PI

这是打破循环的经典方法,通过创建链接“实体”。

如果我错了,请纠正我,但据我所知,您当前希望在Azure存储和SQL存储之间交换信息。如果是这种情况,那么您应该创建一个由SQL和Azure存储继承的
BaseRepository
。然后可以在
BaseRepository
的属性中找到“外围信息”,其子级可以访问这些属性

我想了想,但不知道这是否仍然是坏的,因为它基本上只是使循环更大?存储库中只有一个类需要MVC项目,所以我可以将它转移到一个新的PortalCommunication项目中。然后存储库引用PortalCommunication,它引用MVC项目。MVC项目仍然引用存储库…这不是问题吗?也许我误解了你所说的外围信息…但是在循环中插入另一个项目并不能解决循环依赖性。“外围信息”是你最初文章中的引用。我不知道这对你意味着什么,但对我来说毫无意义;-)哈哈!糟糕的是,我打那部分的时候一定没有头脑发昏。上述方法的问题是,我通过从MVC站点创建ApplicationDbContext类的实例来访问数据库。据我所知,将上下文与MVC分离并将其保存在另一个项目中是不可尝试的,因为它会变得非常混乱。请稍后查看我的编辑并让我知道您的想法谢谢您的回复。我想你是对的。存储库项目与两个数据源的通信太多。我可以将其分开,让我的核心项目(主项目)同时引用这两个项目。