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

问题描述:

我使用DataServiceContext加载一些实体的预测(实体有很多特性,最大限度地减少交通我只加载这些特性,这是需要的时刻)是这样的:WCF数据服务和预测。如何从实体投影实例获取实体URI?

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的投影对象?

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

+0

我不需要设置加载属性。我只需要获得适当的实体URI来将其完整版本(而不是投影)加载到其他数据上下文中进行编辑。 – 2010-11-25 15:47:42

+0

如果您只对URI感兴趣,则不要投射任何东西,只需选择整个实体,然后使用DataServiceContext.GetEntityDescriptor()获取实体的描述符,您可以在其中找到存储SelfLink和EditLink属性的实体指向该实体的URI(第一个用于阅读,第二个用于编辑)。 – 2010-11-26 07:56:35

+0

我需要投影来加载业务实体的轻量级列表以显示在用户界面上。当用户双击选定的投影时,我需要加载一个完整的(200列)实体。 – 2010-11-27 12:10:17