C# 从另一个类中的1个类引用字段
假设我有两个类,C# 从另一个类中的1个类引用字段,c#,class,oop,C#,Class,Oop,假设我有两个类,Project和Document文档是属于某个项目的文档的类。我在文档中引用了ProjectID作为它自己的属性。我应该这样做,还是应该引用项目以获取项目id? 我在文档类中使用项目ID的一个示例是,我添加新文档时,需要知道该文档所属的项目 public class Project { private int _ID; private string _Name; public string Name { get { return _
Project
和Document
<代码>文档是属于某个项目的文档的类。我在文档
中引用了ProjectID
作为它自己的属性。我应该这样做,还是应该引用项目
以获取项目id?我在文档类中使用项目ID的一个示例是,我添加新文档时,需要知道该文档所属的项目
public class Project
{
private int _ID;
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public int ID
{
get { return _ID; }
set { _ID = value; }
}
}
public class Document
{
private int _ID
private string _Title
private int _ProjectID
public int ID
{
get { return _ID; }
set { _ID = value; }
}
public string Title
{
get { return _Title; }
set { _Title = value; }
}
public int ProjectID
{
get { return _ProjectID; }
set { _ProjectID = value; }
}
public DataSet GetDocumentsByProjectID()
{
var dbhelper = new DatabaseHelper();
dbhelper.CommandText = "Get_Documents_By_Project_Select";
SqlParameter[] parameterList = {
new SqlParameter("projectid", ProjectID)
};
dbhelper.CommandParameters = parameterList;
return dbhelper.ExecuteQuerySP();
}
}
将项目作为属性添加到Document类中,并取出projectID
public Project Project { get; set; }
单个项目可能包含多个文档,在这种情况下,关系将是多对一(单个项目的多个文档)。在多对一关系中,如果将项目保留为属性字段,则项目详细信息将不明确。在这种情况下,你的方法会更好
public class Document
{
public int ID { get; set; }
public string Title { get; set; }
public int ProjectId { get; set; }
}
优雅的方法 您可以在Project类中创建文档列表,这将实现多对一关系
public class Project
{
public string Name { get; set; }
public int ID { get; set; }
public List<Documents> Documents { get; set; }
}
公共类项目
{
公共字符串名称{get;set;}
公共int ID{get;set;}
公共列表文档{get;set;}
}
显示的类通常称为实体。它们应该尽可能多地表示一个数据库表。考虑到这一点,存储文档中对项目的引用的唯一方法是通过文档表中的ProjectId
属性。这种建模类方法的第二部分是添加导航属性,以使导航(从父级到子级以及从子级到父级)关系更容易 如果您使用了ORM,比如EntityFramework或NHibernate,这或多或少就是您定义类的方式 一个不是很小的问题是,您应该使用自动属性来定义属性并删除支持字段 那么,您的实体应该如下所示:
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Document> Documents { get; set; }
}
public class Document
{
public int Id { get; set; }
public int ProjectId { get; set; }
public string Title { get; set; }
public Project Project { get; set; }
}
公共类项目
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共ICollection文档{get;set;}
}
公共类文档
{
公共int Id{get;set;}
公共int ProjectId{get;set;}
公共字符串标题{get;set;}
公共项目{get;set;}
}
您应该做的第一件事是使用而不是您正在做的事情:public int ID{get;set;}
它将使您的代码减少一个音调。这实际上取决于您将如何在代码中使用文档。例如,就目前而言,它完美地表示了一个数据库表(通常称为实体)。你能添加一些代码以便我们理解这些类的上下文吗?我添加了一个示例,我认为这也是我感到困惑的地方,是将其表示为实体还是将其表示为文档应该具有的唯一属性。问题不是如何做,而是是否应该做。请提供否决的原因,因此,我可以改进我的回答为什么我要在Document类中同时使用Projectd和对Project类的引用?@Marc,因为Projectd表示存储的内容,而Project属性只是内存中的帮助程序。使用实体框架是最好的方法吗?我想除了我的类是如何设置的以外,我没有使用实体框架。实体框架是一个ORM。您是否需要它取决于应用程序的需要,但这是开发面向数据库的应用程序的一种快速方法