автопроекция в рамках сущности - PullRequest
0 голосов
/ 23 февраля 2012

Есть ли способ создать автопроекцию в рамках сущности?см. пожалуйста:

public class Person{ 
    public int Id {get; set;} 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public string FatherName {get; set;} 
    public string City {get; set;} 
    public string AddressLine {get; set;} 
    public string Something {get; set;} 
}

public class PersonNameModel{
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public string FatherName {get; set;} 
}

public class PersonAddressModel{
    public string City {get; set;} 
    public string AddressLine {get; set;} 
}

// etc...

Я имею в виду, что смогу заменить нормальную проекцию следующим образом:

context.Persons.Select(t => new PersonNameModel{ FirstName = t.FirstName /* etc */ });

с помощью метода расширения, который может использовать отражение и создать автоматическую проекцию, например:

public static class MyExtensions{
    public static IQueryable<T> AutoSelect<T, TProject>(this IQueryable<T> q){
        // read TProject type in reflection
        // create a projection as a IQueryable<T> 
    }
}

Есть ли способ?Я прогуглил это, но не нашел никакого ресурса.Можете ли вы вести меня, пожалуйста?

Ответы [ 2 ]

1 голос
/ 19 августа 2012

Да, можно автоматически спроектировать сущности каркаса сущности для некоторого Dto.Смотрите одну из реализаций здесь https://gist.github.com/1367880

Вы можете использовать ее как:

context.Persons.Project().To<PersonNameModel>().ToList();

В этом случае будет сгенерирован запрос БД для выбора только обязательных столбцов (указанных PersonNameModel).

Если вы хотите просто отобразить результаты запроса (которые извлекли объекты), то EmitMapper или AutoMapper должны быть вашим выбором.

0 голосов
/ 23 февраля 2012

Если я правильно понимаю, что вам нужно сопоставление между объектами, используйте Automapper, это сделает сопоставление для вас

http://www.codeproject.com/Articles/61629/AutoMapper

http://automapper.org/

путь к git-хабу https://github.com/AutoMapper/AutoMapper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...