IncludeAttribute是否在ObjectQuery和DbSet Include方法上添加任何值?

时间:2011-08-08 00:15:08

标签: entity-framework wcf-ria-services

我正在将WCF RIA服务与Entity Framework 4.0结合使用。

为确保相关对象能够安全地传送到客户端,我需要先在ObjectQuery(Of T).Include中使用DbSet(Of TResult).IncludeDomainService方法包含它们。我还需要将IncludeAttribute添加到元数据类中的导航属性。

我做出决定将相关对象传输到客户端并被迫进行两次更改以实现它,这看起来有点多余。

我正在考虑修改T4模板,以便使用IncludeAttribute自动修饰所有导航属性。

我有点担心以前的请求遗留下来的实体无意中被发送到客户端但我的理解是DomainService是无状态的,这应该意味着情况并非如此,对吧?

  

“DomainService”名称的重点是它是stateless   代表我特有的特定域的对象   应用

我看到的

Another approach是自动将Include属性应用于项目中的任何元数据文件。我仍然需要创建元数据文件。

我还没有看到任何其他危险吗?有没有更好的方法来达到同样的效果?

3 个答案:

答案 0 :(得分:2)

This thread帮助我了解其背后的基本原理。希望它有所帮助。

答案 1 :(得分:1)

在这种情况下,我认为您已经确定了潜在的问题空间。通过使IncludeAttributes成为默认值,您的服务将返回您在内存中放置的任何对象图。

实现此解决方案的最佳方法是创建一个自定义DomainServiceDescriptionProvider(here's a decent sample),它可以为正确的属性类型推断IncludeAttribute,而无需保持元数据文件的最新状态。

答案 2 :(得分:0)

我修改了EDMX T4模板以自动应用IncludeAttribute并且它按预期工作。

手动应用我在此过程中识别的属性的一个优点是,您可以控制在客户端上生成的代码量。可以排除仅在服务器上使用的实体。

在我的案例中,这不是问题。