Нужен совет по структуре моей базы данных, для создания полезных сущностей - PullRequest
0 голосов
/ 04 ноября 2010

Мне нужен совет людей относительно того, является ли это наилучшим способом достижения того, чего я хочу.Заранее извиняюсь, если это немного субъективно.

Я хочу использовать Entity Framework V.1 для создания чего-то похожего на следующие классы C #:

abstract class User 
{ 
   public int UserId;
   public string TelephoneNumber;
}

class Teacher : User 
{ 
   public string FavorateNewspaper; 
}

class Pupil : User 
{ 
   public string FavorateCartoon; 
}

Мне нужен совет людей, так каккак лучше всего сохранить эту информацию.

Я планирую использовать SQL Server и обычного поставщика членства.Это создаст для меня таблицу с именем aspnet_Users.Будет две роли: Учитель и Ученик.

Я добавлю в таблицу поля aspnet_Users, которые являются общими для обеих ролей.Затем создайте tbl_Teachers и tbl_Pupils для хранения информации, относящейся к одной роли.

Итак, моя база данных будет выглядеть примерно так:

aspnet_Users
    int UserId
    varchar TelephoneNumber

tbl_Teachers
    int UserId
    varchar FavorateNewspaper

tbl_Pupils
    int UserId
    varchar FavorateCartoon

Конечно, идея состоит в том, что я могу сопоставить данныев aspnet_Users к этому в tbl_Teachers или tbl_Pupils, присоединившись к UserId.

Итак, подведем итог: мои вопросы:

Является ли структура моей базы данных лучшим вариантом для достижения этих классов?

Стоит ли пытаться обернуть сущности в мои собственные классы POCO?

Следует ли изменить структуру базы данных так, чтобы EF создавал сущности, которые ближе к нужным классам?

РЕДАКТИРОВАТЬ: Я перестроил свой вопрос, чтобы было немного яснее, что я спрашиваю.

1 Ответ

1 голос
/ 04 ноября 2010

Если вы используете EF 1, то POCO может быть немного неприятно.Если нет веской причины не делать этого, я бы просто использовал обычные EF-сущности.Кстати, ваша модель базы данных в порядке и является примером отображения наследования TPT (Table Per Type).Вы можете использовать мастер для создания энтитов из баз данных или создать свои энтиты и сопоставить их с соответствующими таблицами.Если вы сделаете первое, вы изначально получите три не связанных между собой сущности.Затем вы использовали бы конструктор, чтобы сообщить EF, что Pupil и Teacher наследуют от User, и этот User является абстрактным.

В общем, одна из сильных сторон EF состоит в том, что сущностям не нужно сопоставлять это с таблицами, которые их сохраняют.В этом случае, хотя есть естественное отображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...