循环依赖在EF中

时间:2013-03-17 19:46:02

标签: c# asp.net asp.net-mvc entity-framework

该项目采用模块化形式。每个模块都位于一个单独的Laibary中。但有时需要在模块之间进行通信。例如,在EF中创建关系。 但是当我做得好的时候,将项目A到B添加引用通常不是问题。 但是当我想将项目引用添加到B时,我会遇到以下错误。

无法添加的参考。将此prpject添加为参考将导致循环依赖

每个模块都是h代码的项目。每个模块都位于一个项目中。 每个模块都有自己的Domain字段。并且定义了它的属性。 (ORM)使用EF。 有时他们会与模块联系。 例如,作为新闻评论的模块希望彼此通信。少数人有关系。

但要插入对此关系的引用让我的其他项目。我遇到这个错误 新闻模块

public class News
{
    public string Title { get; set; }
    public string Text { get; set; }

    public IList<Comment> Comments { set; get; }
}

评论模块

public class Comment
{
    public string Title { get; set; }
    public string TextComment { get; set; }

    public News  New { set; get; }
}

如果你能帮助我更好地设计项目,我感激不尽

2 个答案:

答案 0 :(得分:2)

我在这里看到两个选项:

  1. 将共享代码移至第三个库,以便A和B将引用它,而不是彼此
  2. 将A和B合并到一个库中

答案 1 :(得分:0)

您将两个实体链接在一起,因为我在几乎所有我见过的实体框架教程中都推荐这样做。但是,我只会在小型项目中这样做,您可以将所有域模型放在一个程序集中。

如果您正在开发一个更大的项目,您需要根据子域将不同的程序集中的域模型分开,我不会将这两个实体链接在一起。相反,我会问自己,是负责其评论数据的新闻,还是负责新闻数据的评论?

通过这种方式,您可以找到根实体,根据上下文,它们可以是其中之一。例如,如果您确定新闻是根,则新闻将包含评论,但评论应仅引用新闻ID,因为他们不对新闻数据负责。