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
Entity framework 如何避免实体之间的名称空间依赖循环?_Entity Framework_Namespaces_Ndepend - Fatal编程技术网

Entity framework 如何避免实体之间的名称空间依赖循环?

Entity framework 如何避免实体之间的名称空间依赖循环?,entity-framework,namespaces,ndepend,Entity Framework,Namespaces,Ndepend,我用NDepend分析了我的代码,它发现了一些关键规则,其中之一是:“避免名称空间相互依赖” 但对于导航属性,我不知道如何组织代码来消除这些“错误” 当然,我可以将所有实体放在同一个名称空间中,但我认为我实际的“按名称空间”类分离组织并没有那么糟糕 也许我必须忽略此消息并排除ndepend扫描的持久性程序集 我错过了什么 头等舱: using System; using System.Collections.Generic; using Persistence.Entities.ContactM

我用NDepend分析了我的代码,它发现了一些关键规则,其中之一是:“避免名称空间相互依赖”

但对于导航属性,我不知道如何组织代码来消除这些“错误”

当然,我可以将所有实体放在同一个名称空间中,但我认为我实际的“按名称空间”类分离组织并没有那么糟糕

也许我必须忽略此消息并排除ndepend扫描的持久性程序集

我错过了什么

头等舱:

using System;
using System.Collections.Generic;
using Persistence.Entities.ContactModule;

namespace Persistence.Entities.TeachingModule
{
    public class Course
    {        
        private Course() { }
        public Course(string reference,Company company )
        {
            this.Reference = reference ?? throw new ArgumentNullException(nameof(reference));
            this.Company = company ?? throw new ArgumentNullException(nameof(company));
        }
        public int Id { get; private set; } 
        public string Reference { get; private set; } = null!;
        public int CompanyId { get; set; }
        public Company Company { get; set; } = null!;
    }
}
二等舱:

using System;
using System.Collections.Generic;
using Persistence.Entities.TeachingModule;

namespace Persistence.Entities.ContactModule
{
    public class Company
    {        
        private Company() { }
        public Company(string reference, string name)
        {
            this.Reference = reference ?? throw new ArgumentNullException(nameof(reference));
            this.Name = name ?? throw new ArgumentNullException(nameof(name));
        }
        public int Id { get; private set; } 
        public string Name { get; private set; } = null!;        
        public ICollection<Course> Courses { get; set; } = new List<Course>();
    }
}
使用系统;
使用System.Collections.Generic;
使用Persistence.Entities.TeachingModule;
命名空间Persistence.Entities.ContactModule
{
公营公司
{        
私人公司(){}
上市公司(字符串引用、字符串名称)
{
this.Reference=Reference??抛出新的ArgumentNullException(nameof(Reference));
this.Name=Name??抛出新的ArgumentNullException(nameof(Name));
}
public int Id{get;private set;}
公共字符串名称{get;private set;}=null!;
公共ICollection课程{get;set;}=new List();
}
}

该规则应该可以帮助您创建分层代码,而不是意大利面条。最后,我认为您的所有实体都只在一个层中:
Persistence.entities
,因此在我看来,模块名称空间不会增加太多,也因为在不同的名称空间中不会有相同的类名。事实上,这些都是基于意见的。格特·阿诺德的建议听起来不错。您还可以在两个名称空间引用的第三个名称空间中使用某些接口ICourse ICompany,并在类中使用这些接口。该规则应帮助您创建分层代码,而不是意大利面条。最后,我认为您的所有实体都只在一个层中:
Persistence.entities
,因此在我看来,模块名称空间不会增加太多,也因为在不同的名称空间中不会有相同的类名。事实上,这些都是基于意见的。格特·阿诺德的建议听起来不错。您还可以在两个名称空间引用的第三个名称空间中使用某些接口ICourse ICompany,并在类中使用这些接口。