2012-04-02 1 views
1

У нас есть определенная структура, называемая Measure, и мы хотели бы использовать этот тип вместо типа поля базы данных, например. двойной.Использовать проекцию для заполнения не отображаемых типов в EF

Таким образом, мы имеем объект:

public class MyEnity 
{ 
    public int MyValue { get; set; } 
} 

И у нас есть объект передачи: общественного класса MyDto { общественного Measure MyMeasureValue {получить; задавать; } }

Если тип недвижимости будет соответствовать, мы можем только заполнить наши DTO в расчете на одного проекции:

enities.Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) }); 

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

entities.Select(i => new { MyValue = i.MyValue }) 
     .AsEnumerable() 
     .Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) }); 

Мы хотим избежать этого циклических несколько раз в процессе пополнения, особенно потому, что есть много свойств для заполнения. Есть ли способ, которым мы можем пойти с первым утверждением и научить EF выполнять создание Мера? (например, перехват и т. д.)

PS. Это не вариант создания сложного типа EF и его отображение!

Благодаря Enyra

ответ

0

Вы можете использовать сложные типы при выборке некоторых свойств объекта с помощью Linq-Entity. Например;

Model1Container container = new Model1Container(); 
var temp = from o in container.MasterSet 
      select new 
        { 
         x = o.LastModifiedBy, 
         y = o.LastModifiedDate 
        }; 

Кстати, вместо сопоставления DTOS вручную лучше использовать autommaper. Он имеет функциональность для сопоставления собственных имен без объявления объявления.

+0

Типы комплексов не являются опцией, потому что наш тип является и должен быть структурой. Automapper может быть решением, я должен это прояснить. – Enyra