Я разрабатываю новый проект 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;
}
Может кто-нибудь предложить какие-либо рекомендации се?
Главным моментом ViewModels является то, что они являются _not_ дубликатами объектов Model ... Это похоже на саморазрушение. –
Я хотел бы сделать более сложные вещи с атрибутами, чтобы он не был дубликатом, но имел бы в виду, что я мог бы контролировать все из одного файла. – user1573618
Вы считали использование T4? – boindiil