21 объект с одинаковой структурой. Что я должен делать, когда пришло время сделать CRUD для этих объектов - PullRequest
1 голос
/ 10 ноября 2010

У меня 21 сущность с одинаковой структурой. Тот же атрибут тоже.
Каждая сущность содержит эти атрибуты:
AreaType
ID
IsActive
LangID
TXT

ModuleType
ID
IsActive
LangID
текст ...


Что мне нужно для выполнения родового Crud. Я уже знаю, что мне нужно создать общий репозиторий. Моя проблема заключается в выполнении своего рода универсального ViewModel.

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

 ... Inherits="System.Web.Mvc.ViewPage<...Dont know>"

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 10 ноября 2010

Распространенным подходом к этой проблеме является использование ViewModels.Здесь вы создаете определенные классы, которые будут использоваться в качестве моделей в строго типизированных представлениях.Эти классы не будут созданы EF.Классы ViewModel могут иметь общую базу, которая инкапсулирует ваши общие поля.В вашем слое доступа к данным вам нужно будет перемещать данные между вашими классами ViewModel и вашими классами EF.Такие вещи, как AutoMapper (из CodePlex) действительно хорошо работают, чтобы уменьшить, если не исключить, все утомительное «левостороннее» кодирование.

0 голосов
/ 10 ноября 2010

Одна из идей - просто изменить базовые таблицы. Объедините AreaType и ModuleType в одну таблицу «WheverType», которая содержит поле, точно идентифицирующее его тип. Затем, когда вы закодируете свои классы, вы будете иметь дело только с одним классом.

Однако существуют и другие проблемы, и вы должны делать это только в том случае, если это имеет смысл в вашем приложении.

0 голосов
/ 10 ноября 2010

Не слишком знаком с MVC, но (при условии, что он соответствует вашей иерархии), я думаю, вы могли бы создать абстрактный класс, который содержит нужные вам свойства, например,

public abstract class ViewableObject {
    public abstract int ID {get; set;}
    public abstract bool IsActive {get; set;}
    // etc
}

Затем реализуйте это с помощью ваших обычных классов (AreaType и т. Д.), Например:

public class AreaType: ViewableObject{
    public override int ID { get; set; }
    public override bool IsActive{ get; set; }
}

и заставьте представление использовать абстрактный класс.

... Inherits="System.Web.Mvc.ViewPage<ViewableObject>"
...