假设我们有 2 种类型,通过 EF 4 映射到数据库。
Schedule 1.....1 Visit
此外,我们还有第三种自定义 View 类型
public class ScheduleView
{
public Schedule Schedule { get; set; }
public Visit Visit { get; set; }
}
所以我们可以编写连接查询
var query = Context.Schedule.Join(Context.Visit
,/*Schedule join key definition*/,/*Visit join key definition*/,
(scheduleView, visit) => new ScheduleView {Schedule = scheduleView, Visit = visit})
问题是我还需要加载 Visit
类型的 Patient
属性。但是当我写
query = (query as ObjectQuery<ScheduleView>).Include("Visit.Patient");
我收到一个运行时错误
Unable to cast the type 'System.Linq.IQueryable
1' to type 'System.Data.Objects.ObjectQuery
1'. LINQ to Entities only supports casting Entity Data Model primitive types.
那么,问题是 - 如何强制查询在我的自定义类型中包含某些内容?
最佳答案
最后,开发了一些丑陋的解决方法 - 在自定义类型中引入新成员并明确查询它。
public class ScheduleView
{
public Schedule Schedule { get; set; }
public Visit Visit { get; set; }
**public Patient Patient{ get; set; }**
}
var query = Context.Schedule.Join(Context.Visit
,/*Schedule join key definition*/,/*Visit join key definition*/,
(scheduleView, visit) => new ScheduleView
{Schedule = scheduleView, Visit = visit, **Patient = visit.Patient**})
现在我的自定义类型中正确加载了 Patient
。有趣的是,当我在引入 ScheduleView.Patient
后调查 ScheduleView.Visiting.Patient
时,我发现它也已加载。
在这种情况下无法获得 EF 逻辑。并且不知道如何强制加载 ScheduleView.Visiting.Patient
而不必加载无用的 ScheduleView.Patient
:(
关于c# - Entity Framework : how to do correct "Include" on custom type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4021755/