0

我正在使用 DataServiceContext 加载一些实体投影(实体有很多属性,为了最大限度地减少流量,我只加载目前需要的那些属性),如下所示:

from x in ctx.Portfolios
       select new 
       {
         Id = x.Id,
         Name = x.Name,
         PortfolioName = x.PortfolioName,
         Description = x.Description,
         ValidFrom = x.ValidFrom,
         ValidUntil = x.ValidUntil
       };

我需要的是实体的有效 URI 来加载它以获取详细信息视图。

我尝试使用 ctx.TryGetUri(obj, out uri),但它总是返回 null(可能是因为非跟踪投影,但是,我已经加载了 PK 属性(Id),所以它一定不是案子)。

问题是,我如何确定底层数据实体的 URI,有一个带有 PK 的投影对象?

4

1 回答 1

1

在 C# 中,匿名类型是使用不可设置的属性生成的(属性没有设置器)。因此,WCF 数据服务客户端无法跟踪这些(因为它没有任何意义,它无法在实现期间覆盖属性值)。所以结果是实例没有被跟踪。要解决此问题,只需声明一个具有您需要的属性的非匿名类并将其投影到该类中(确保属性是可设置的)。请注意,VB 的匿名类型确实具有可设置的属性,因此它们将被跟踪。

于 2010-09-02T01:16:22.253 回答