2013-08-12 4 views
2

Я разрабатываю новый проект MVC4 с использованием Entity Framework в первый раз. Мне очень нравится иметь возможность использовать первые модели кода и обновлять базу данных с помощью миграции. Я хотел бы иметь возможность иметь только одно место для изменения моей модели (класс сущности) и для изменений в этом, таких как новые свойства, которые будут отображаться не только в БД после миграции, но и в моих моделях просмотра.C# MVC Динамически создавать модель представления

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

Например, для простой enity рамочной модели, как это:

public class UsersContext : DbContext 
{ 
     public UsersContext() 
      : base("DefaultConnection") 
     { 
     } 

     public DbSet<UserProfile> UserProfiles { get; set; } 

     [Table("UserProfile")] 
     public class UserProfile 
     { 
      [Key] 
      [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
      public int UserId { get; set; } 
      public string FirstName { get; set; } 
      public string LastName { get; set; } 
     } 
} 

Я хотел бы, чтобы создать динамический класс, который lõoke так:

public class UserProfileView 
{ 
     [ScaffoldColumn(false)] 
     public int UserId { get; set; } 

     public string FirstName { get; set; } 

     public string LastName { get; set; } 
} 

Псевдокод может выглядеть примерно так это, но я не знаю, как я могу это сделать:

function dynamic GeneraveViewModel(object entity) 
{ 
    Type objectType = entity.GetType(); 
    dynamic viewModel = new System.Dynamic.ExpandoObject(); 

    //loop through the entity properties 
    foreach (PropertyInfo propertyInfo in objectType.GetProperties()) 
    { 
     //somehow assign the dynamic properties and values of the viewModel using the property info. 

     //DO some additional stuff based on the attributes (e.g. if the entity property was [Key] make it [ScaffoldColumn(false)] in the viewModel. 
    } 

    return viewModel; 
} 

Может кто-нибудь предложить какие-либо рекомендации се?

+1

Главным моментом ViewModels является то, что они являются _not_ дубликатами объектов Model ... Это похоже на саморазрушение. –

+0

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

+0

Вы считали использование T4? – boindiil

ответ

2

Я создал Dynamic MVC для этого.

http://dynamicmvc.com

Install-пакет dynamicmvc

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

Смежные вопросы