これがセットアップです
名前空間 DAL と名前空間 DTO があります (別のアセンブリ内)。どちらも Foo クラスを含んでいます。私がやろうとしていたのは、DTO 型で EF インクルードを指定し、それらを DAL 型に変換することです。
フロントエンドからの次のコレクションがあります。
using DTO;
public class GetFooById : Request
{
public GetFooById()
{
IncludeProperties = new HashSet<Expression<Func<object, object>>>
{
x => ((Foo)x).Bar, //DTO.Foo, when debugging is DAL.Foo
x => ((Foo)x).Foobars,
};
}
}
このコレクションを次のような別のアセンブリで使用します。
IQueryable<object> query = Context.Foos;
foreach (var expr in request.IncludeProperties)
{
query = query.Include(expr);
}
var foo = query.First(x => x.Id == request.Id);
奇妙なことに、このコードはコンパイルおよび実行されていますが、含まれているプロパティは null です。デバッグ中にこの部分にカーソルを合わせると:x => ((Foo)x).Bar
デバッガーはFoo
、含まれている DTO.Foo ではなく、タイプが DAL.Foo であると表示します。
これは、DTO へのインクルードがなく、DAL へのインクルードがあるファイルに式がコンパイルされているためですか? これは c# のバグではありませんか?
これは C# で予想される動作ですか?
プロジェクト フレームワークは 4.0 ですが、4.5 をインストールしてコンパイルしています。