实体框架:如何部分填充实体

时间:2009-11-18 19:16:49

标签: .net entity-framework anonymous-types

使用EF创建查询时,通常我们会创建一个匿名类型,以限制返回的列数。

但是匿名类型不能返回或用作方法调用的参数,这意味着与该匿名对象相关的所有工作都应该在单个方法中完成。这真的很糟糕。

当然,我们不想创建显式类型来表示现有实体的子集。

在我看来,我们仍然想玩现有的实体(比如Person),但在不同的场景中,我们只关心某些属性。所以我认为最好的方法是部分填充实体。但似乎Linq 2 EF不支持它。

有什么建议吗?

由于

3 个答案:

答案 0 :(得分:1)

不是特定于EF(我们没有使用EF),但我经常使用我们称之为“摘要”的类型。这些信息包含主要关键信息和其他重要信息的子集,但只能读取,可用于构建完整实体。我们还在常规类型中使用了延迟加载,但这是一个特定的优化。通常用于搜索结果 - 例如患者对象很大,但患者摘要包含用于在一组(可能是数百名英国人和迈克尔人)搜索结果中识别患者的基本信息:最后,第一,图表编号,DOB。我们不允许摘要对象增长,而没有专门解决扩展属性的绝对需要。

答案 1 :(得分:1)

And certainly, we don't want to create explicit types just to represent a subset of an existing entity.

我认为没有办法解决它。如果域模型具有少于EF生成类型的属性集,则只需使用LINQ将EF模型投影到域模型。它实际上并没有那么糟糕,因为你不是直接依赖ET模型,而且更容易做TDD。

答案 2 :(得分:0)

您可以将匿名类型返回为System.Object,否则您必须“创建显式类型以表示现有实体的子集”。我要做的是创建一个公共接口,其中包含实体类型属性的子集,然后使实体类型和子集类型都实现它。子集类型可以是内部的,因此您的应用程序代码只能看到实体类型和接口。