.net 4.0 WCF数据服务和预测。如何从实体投影实例获取实体URI?

.net 4.0 WCF数据服务和预测。如何从实体投影实例获取实体URI?,.net-4.0,wcf-data-services,astoria,.net 4.0,Wcf Data Services,Astoria,我使用DataServiceContext加载一些实体投影(实体有许多属性,为了最小化流量,我只加载那些属性,这是目前需要的),如下所示: from x in ctx.Portfolios select new { Id = x.Id, Name = x.Name, PortfolioName = x.PortfolioName, Description = x.Description,

我使用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),所以情况一定不是这样)

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

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

我不需要设置已加载的属性。我只需要获取实体的适当URI,以便在其他数据上下文中加载其完整版本(而不是投影)进行编辑。如果您只对URI感兴趣,则不投影任何内容,只需选择整个实体,然后使用DataServiceContext.GetEntityDescriptor()要获取实体的描述符,您可以在其中找到存储指向该实体的URI的SelfLink和EditLink属性(第一个用于读取,第二个用于编辑)。我需要投影来加载要在UI上显示的按业务实体的轻量级列表。当用户双击选定的投影时,我需要加载一个完整的(200列)实体。然后最简单的方法是声明一个只包含给定实体的两个属性的类,并在投影中使用它。但是如果你在C#中,你必须手工定义这个类,并设置属性。