相关疑难解决方法(0)

使用Include来获取派生类的加载属性

我有类似的课程:

Person
{
   Name
   Address
}

Employee : Person
{
   Compensation - object
}

Visitor : Person
{

}
Run Code Online (Sandbox Code Playgroud)

如果我写linq:

var persons = Context.Persons
                .Include("Compensation");
Run Code Online (Sandbox Code Playgroud)

我收到错误:

指定的包含路径无效.EntityType"Person"未声明名为"Compensation"的导航属性.

如果我这样做,它可以正常工作

var persons = Context.Persons
                .OfType<Employee>()
                .Include("Compensation");
Run Code Online (Sandbox Code Playgroud)

但我想让员工和访问者在同一个查询中.

看起来在EF4 UserVoice上有此功能的请求:http: //data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1249289-include-property-of衍生类?REF =标题

但它看起来不会很快就会完成.

这个问题有什么好的解决方法?

inheritance entity-framework ef-code-first

15
推荐指数
1
解决办法
4147
查看次数

实体框架 - 使用.Include进行继承?

我认为这里有类似的帖子,但不完全一样......

我的EF模型中有两个实体 - 让我们称之为Person和Developer,后者继承自前者.

我还有一个名为Qualifications的开发者协会.这在Person实体上不可见.

如果我正在针对上下文编写查询,我该如何自动.Include()开发人员的资格,例如

来自员工的context.Employee .Include("Qualifications")选择员工

不起作用...... EF抱怨这种关系不存在(我假设因为它在Employee上不存在 - 但是在上下文中没有Developer实体,只有Employee).

entity-framework

9
推荐指数
2
解决办法
8341
查看次数

基于抽象实体的急切加载嵌套导航问题(EF CTP5)

我的EF模型的一部分看起来像这样:

在此输入图像描述

摘要:

  • 位置有很多帖子
  • Post是一个抽象
  • 讨论得出帖子
  • 讨论有很多评论

现在,我正试图实现的查询:

获取有关位置ID 1234的信息,包括与这些讨论相关的任何讨论和评论.

我可以得到讨论和这样的评论:

var discussions = ctx.Posts
                     .OfType<Discussion>()
                     .Include(x => x.Comments)
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

但我似乎无法根据位置实体上的帖子导航获取它.

我试过这个:

var locationWithDiscussionsAndComments = ctx
                    .Locations
                    .Include(x => x.Posts
                                   .OfType<Discussion>()
                                   .Select(y => y.Comments))
                    .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

哪个编译,但我得到错误:

System.ArgumentException:包含路径表达式必须引用实体定义的属性,也可以引用嵌套属性或对Select的调用.参数名称:路径

有任何想法吗?我可能会从帖子中"倒退":

var locationWithDiscussionsAndComments = ctx
                   .Posts
                   .Include(x => x.Location)
                   .OfType<Discussion>()
                   .Include(x => x.Comments)
                   .Where(x => x.LocationId == 1234)
                   .Select(x => x.Location)
                   .ToList();
Run Code Online (Sandbox Code Playgroud)

但就我的存储库而言,这在毛发和语义上都是错误的(我不应该通过帖子库来获取有关位置的信息).

有任何想法吗?

编辑

因此,在对它进行更大的思考之后,我意识到这OfType<T>是一个过滤操作.据我们所知,EF不支持使用预先加载进行过滤.唯一的选择是检索所有内容,或使用匿名类型投影.

我无法检索所有内容,因为涉及的元数据太多了.所以我正在尝试匿名类型投影.

c# abstract-class eager-loading navigational-properties entity-framework-ctp5

5
推荐指数
1
解决办法
4372
查看次数