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



我正在使用WCF RIA服务与实体框架4.0。

为了确保相关对象安全地到达客户端,我需要首先使用ObjectQuery(Of T). include或DbSet(Of result)来包含它们。在DomainService中包含方法。我还需要将IncludeAttribute添加到元数据类中的导航属性中。

我做了一个单一的决定有一个相关的对象转移到客户端,并被迫使两个更改来实现它,这似乎有点多余。

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

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

"DomainService"名称的意义在于它是无状态的对象,该对象表示具有我的特征的特定域应用程序。

我看到的另一种方法是自动将Include属性应用于项目中的任何元数据文件。我仍然需要创建元数据文件。

还有什么我没有看到的危险吗?有没有更好的方法来达到同样的效果?

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

实现此解决方案的最佳方法是创建一个自定义DomainServiceDescriptionProvider(这里是一个不错的示例),它可以推断出正确属性类型的IncludeAttribute,而无需保持元数据文件的最新

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

手动应用我在此过程中确定的属性的一个优点是,您能够控制在客户机上生成的代码量。只在服务器上使用的实体可以被排除。

最新更新