【发布时间】:2012-01-30 16:46:52
【问题描述】:
我尝试再创建一个新的 ASP.NET MVC 应用程序(使用 Entity Framework),但又有点沮丧。
例如,我有一个包含以下表格的数据库:
表用户:
CREATE TABLE [dbo].[Users](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Title] [nvarchar](max) NOT NULL,
[Company] [nvarchar](50) NOT NULL,
[Phone] [nvarchar](50) NULL,
[CompanyUrl] [nvarchar](max) NULL,
[EmailPlainText] [bit] NULL,
[ProfileImage] [nvarchar](max) NULL,
[ProfileDescription] [nvarchar](max) NULL,
[ProfileDocument] [nvarchar](max) NULL,
[ProfileWebSite] [nvarchar](max) NULL,
[Facebook] [nvarchar](max) NULL,
[Linkedin] [nvarchar](max) NULL,
[MySpace] [nvarchar](max) NULL,
[Twitter] [nvarchar](max) NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[Services](
[ServiceID] [int] IDENTITY(1,1) NOT NULL,
[ServiceName] [nvarchar](250) NOT NULL,
[ServiceOrder] [int] NOT NULL,
CONSTRAINT [PK_Services] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[UserServices](
[UserID] [int] NOT NULL,
[ServiceID] [int] NOT NULL,
CONSTRAINT [PK_UserServices] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[GeographicalAreas](
[GeoAreaID] [int] IDENTITY(1,1) NOT NULL,
[GeoAreaName] [nvarchar](250) NOT NULL,
CONSTRAINT [PK_GeographicalAreas] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[UserGeoAreas](
[UserID] [int] NOT NULL,
[GeoAreaID] [int] NOT NULL,
CONSTRAINT [PK_UserGeoAreas] PRIMARY KEY CLUSTERED
所以,我们怎么看,有一个表用于用户信息,2 个表字典(Services 和 GeographicalAreas)和 2 个表(UserServices 和 UserGeoAreas)用于用户和表字典之间的多对多关系。标准情况
我们还有 3 个不同的页面:
- 应该在第一页显示:
FirstName、LastName、Title、Company、Services(链接到用户)和 GeoAreas(链接到用户)
- 在第二页:
名字、姓氏、职务、公司、Facebook、Linkedin 和 Twitter
- 在第三页上只有 FirstName、LastName、ProfileImage 和 ProfileDocument
另外,在第一个页面上应该验证“必需”等属性
那么,如何实现呢?
第一种方式:
为每个页面创建 3 个不同的视图类(3 个不同的模型),创建 3 个不同的 linq-requests(类存储库中的 3 个公共方法),控制器的每个方法(对于每个页面)调用类中的适当方法-存储库
第二种方式:
创建一个通用视图类(包括3页所有需要的字段),类库中的一个通用方法,填充所有字段,控制器的每个方法调用存储库的方法
第三种方式:
为每个页面创建 3 个不同的视图类(3 个不同的模型),一个公共类(包括 3 个页面的所有需要字段),一个类存储库中的一个方法,它填充所有字段,3 个转换器来移动数据从公共类到适当的视图类。
【问题讨论】:
标签: asp.net-mvc-3 entity-framework