21个具有相同结构的实体。当我为这些实体制作CRUD时,我应该做什么

时间:2010-11-10 16:19:23

标签: asp.net asp.net-mvc-2 generics entity-framework-4 abstract-class

我有21个具有相同结构的实体。 同样的属性。
每个实体都包含这些属性:
AreaType
ID
IsActive
LangID
TXT

ModuleType
ID
IsActive
LangID
文本 ...


我需要执行一般的Crud。我已经知道我需要创建一个通用存储库。我的问题是执行一种通用的ViewModel。

如何为“创建表单”创建通用视图。
我不知道我需要传递的视图的继承是Generic。

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

任何想法?

3 个答案:

答案 0 :(得分:2)

此问题的常见方法是使用ViewModels。您可以在此处创建特定类,以用作强类型视图中的模型。这些类不是EF创建的类。 ViewModel类可以有一个公共基础来封装您的公共字段。在数据访问层中,您需要在ViewModel类和EF类之间移动数据。 AutoMapper(来自CodePlex)之类的东西可以很好地减少(如果不能消除)所有繁琐的“左手右手”编码。

答案 1 :(得分:0)

对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>"

答案 2 :(得分:0)

一个想法是简单地更改基础表。将AreaType和ModuleType合并到一个“WhateverType”表中,该表包含一个确切地标识其类型的字段。然后当你对你的类进行编码时,你将只有一个类来处理。

但是,还有其他问题,只有在您的应用程序中有意义时才应该这样做。