所以这是设置
您有一个命名空间 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);
奇怪的是,这段代码正在编译和执行,但包含的属性为空。当我调试并将鼠标悬停在这部分上时:x => ((Foo)x).Bar
调试器说Foo
是类型:DAL.Foo 而不是包含的 DTO.Foo。
这是因为表达式编译在一个文件中,我们没有包含到 DTO,但我们有一个包含到 DAL?这不是 c# 中的错误吗?
这是 C# 中的预期行为吗?
项目框架是 4.0,但我正在安装 4.5 进行编译。