2012-04-02 3 views
1

Measureという特定の構造体があり、この型をデータベースのフィールド型の代わりに使用したいとします。ダブル。投影法を使用してEFでマップされた型を記入しない

だから我々は実体があります

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

を我々は転送オブジェクトがあります。 パブリッククラスMyDto { 公共の測定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にMeasure作成を教える方法がありますか? (例えば、迎撃等)

PS。 EF複合型を作成してマップするオプションはありません。

おかげEnyra

答えて

0

LINQのエンティティを使用してエンティティのいくつかのプロパティを取得しているときは、複合型を使用することができます。例えば;

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

ちなみに、DTOSを手でマッピングする代わりに、自動印刷を使用する方がいいです。明示的な宣言なしに、一致する固有の名前をマップする機能を持っています。

+0

私たちの型は構造体でなければならないので、複合型の型はオプションではありません。 Automapperは解決策になるかもしれませんが、私はこれを明確にしなければなりません。 – Enyra

関連する問題