Мне нужно реализовать следующее, но я не уверен, что лучший способ:Как реализовать различные типы класса: наследование, интерфейс или свойство класса?
Я создаю функцию сообщения для приложения MVC.
Есть два типа сообщений:
- Публичные сообщения
- Личные сообщения
Единственное отличие состоит в том, что публичные сообщения имеют поле даты ValidFrom и ValidTo. Я пробовал следующее:
Способ 1, интерфейс Интерфейс IMessage. Два класса PrivateMessage и PublicMessage, которые реализуют интерфейс. PublicMessage имеет два дополнительных свойства. Подключил его к двум различным таблицам с каркасом сущности.
Способ 2, наследование Создайте базовый класс сообщения, в котором есть все поля. Создайте два класса, которые наследуют базовый класс. Может сопоставить класс сообщений с db, поэтому у меня есть только одна таблица для хранения записей. Кажется, я не могу сопоставить интерфейс с EF Code.
Метод 3, Enum свойство, чтобы установить, какой тип сообщения
public enum MessageType
{
Public = 1,
Private = 2,
}
у меня только один класс сообщения, но добавить поле, чтобы показать, какой тип сообщения он. Карты легко переносятся на одну таблицу и легко искать сообщения типа «Public». Я должен сделать мини-обертку вокруг enum, потому что EF не создаст для этого поля в db.
Действительно ли два поля свойств достаточно, чтобы оправдать два разных класса? Поиск двух таблиц базы данных для непрочитанных сообщений немного неэффективен?
Есть ли правильный способ сделать это?
Я использую Entity Framework Code First 4.3.
Спасибо, что касается первого подхода. Вы бы использовали интерфейс, который наследуют оба класса. Вы знаете, как сопоставить его с той же таблицей в EF (достаточно ли установить modelBuilder.Entity(). ToTable («Сообщения»); modelBuilder.Entity (). ToTable («Сообщения» »); –
cfs
на самом деле я не думаю, что вам нужен интерфейс, который может иметь два класса как PublicMessage и PrivateMessage, которые оба наследуются от одного BaseMessage. Я не эксперт EF, а вот статья, которая может помочь: http: // www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application – Beatles1692
Спасибо за ссылку Очень полезно. В последнем вопросе вы бы включили все поля в базовый класс сообщений или только общие поля? Кажется странным иметь свойства класса PrivateMessage, которые он не использует, поэтому я склоняюсь к тому, чтобы иметь общий поля – cfs