c# - Entity Framework : how to do correct "Include" on custom type

标签 c# linq-to-entities entity-framework-4

假设我们有 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.IQueryable1' to type 'System.Data.Objects.ObjectQuery1'. 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/

相关文章:

c# - RavenDB:返回属性为空值的对象

C# 最佳实践 - 事件订阅

c# - 使用 Entity Framework 的输出参数执行 SQL 存储过程

c# - .NET 4.0 EDMX从模型生成数据库,然后执行SQL从表中删除数据

sql-server - 插入到具有而不是来自实体数据框架的触发器的表中时出错

c# - 如何在不删除 asp.net c# 中的子项的情况下删除父控件?

c# - 使用类与结构作为字典键

c# - 使用 linq 处理空字符串

c# - 需要帮助为Where子句创建表达式树

entity-framework - 关于如何在 EF 4.1 中映射复杂的 POCO 对象的任何体面资源?