Смоделируйте внешний ключ базы данных в c # - PullRequest
4 голосов
/ 08 февраля 2012

Я создаю приложение календаря.У меня есть таблица назначений и таблица лиц.Эти 2 связаны полем PersonID в каждой таблице.

Мой вопрос заключается в том, должен ли мой базовый объект .Net Appointment содержать свойство для PersonName, и я заполняю объект из представления базы данных (или хранимой процедуры, которая присоединяетсятаблицы) или более правильно, чтобы класс Appointment содержал класс People?Если ответ последний, каков наилучший способ заполнения объекта Appointment / Person из базы данных?

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Я не уверен насчет чтения базы данных. Но классы могут выглядеть так:

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 голос
/ 08 февраля 2012

Вы не должны дублировать свойства.Когда у enetity / class должны быть только свойства, действительные для этой сущности.

Если вы хотите вызвать другую таблицу, у вас должно быть свойство, которое будет возвращать другую сущность по определенному внешнему ключу.

В вашем случае у меня будет

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

Надеюсь, что это поможет.

0 голосов
/ 08 февраля 2012

Предположим, что вы не используете 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 для получения данных из БД:

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