假设我有两个课程Project
和Document
。 Document
是属于某个项目的文档的类。我在ProjectID
中引用Document
作为自己的属性。我应该这样做还是应该引用Project
以获得项目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();
}
}
答案 0 :(得分:2)
您要显示的类通常称为实体。这些应该尽可能地代表数据库表。考虑到这一点,从文档存储项目引用的唯一方法是通过Documents表中的ProjectId
属性。
这种建模类方法的第二部分是添加导航属性,以便更容易导航(从父级到子级,从子级到父级)关系。
如果您使用ORM,例如Entity Framework或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; }
}
答案 1 :(得分:-1)
单个项目可能包含多个文档,在这种情况下,关系将是多对一(单个项目的许多文档)。在多对一关系中,如果我们将Project保留为属性字段,那么项目详细信息将不明确。在这种情况下,您的方法会更好。
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; }
}
答案 2 :(得分:-2)
将Project添加为Document类中的属性并取出projectID
public Project Project { get; set; }