在另一个类中引用一个类的字段

时间:2018-04-24 18:15:58

标签: c# class oop

假设我有两个课程ProjectDocumentDocument是属于某个项目的文档的类。我在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();
    }
}

3 个答案:

答案 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; }