在c#中建模数据库外键

时间:2012-02-08 12:45:29

标签: c# oop object-design

我正在创建一个日历应用程序。我有一个约会表和一个人员表。 2由每个表中的PersonID字段链接。

我的问题是,我的基础.Net Appointment对象是否包含PersonName的属性,我从数据库视图(或连接表的存储过程)填充对象,或者让Appointment类包含更正确人民班?如果答案是后者,那么从数据库中填充约会/人物对象的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

我不确定阅读数据库。但这些课程看起来像:

public class Person
{
    public List<Appointment> Appointments { get; private set; }
    ...

    public Person()
    {
        Appointments = new List<Appointment>();
    }
}

public class Appointment
{
    public Person Person { get; set; } // Only if you need this relation from
    ...
}

在你的模特中:

Persons = new List<Person>();

答案 1 :(得分:1)

您不应该复制属性。一旦enetity / class只应具有对该实体有效的属性。

如果你想调用另一个表,那么你应该拥有一个属性,该属性将通过特定的外键返回另一个实体。

在你的情况下,我会

public class Person
{
    List<Appointment> _appointments;
    public List<Appointment> Appointments
    {
        get
        {
            if (_appointments == null) _appointments = //LOAD APPOINTMENTS FOR THAT PERSON
            return _appointments;
        }
    }
}

希望有所帮助。

答案 2 :(得分:0)

假设您没有使用ORM,您可以查看DAO模式: http://en.wikipedia.org/wiki/Data_access_object

我会创建两个DTO:

class Person
{
    public int id { get; set; }
    public String name { get; set; }
}

class Appointment
{
    public int id { get; set; }
    public Date when { get; set; }
    public Person who { get; set; }
}

一个“完整”的预约课程:

class FullAppointment
{
     private Person person;
     private List<Appointment> appointment;
}

然后是DTO从DB获取数据:

class AppointmentDTO
{
   public FullAppointment retrieveFromDb(int personId)
   {//...}
}