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