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的匿名类型具有可设置的属性,因此它们将被跟踪。
我不需要设置加载属性。我只需要获得适当的实体URI来将其完整版本(而不是投影)加载到其他数据上下文中进行编辑。 – 2010-11-25 15:47:42
如果您只对URI感兴趣,则不要投射任何东西,只需选择整个实体,然后使用DataServiceContext.GetEntityDescriptor()获取实体的描述符,您可以在其中找到存储SelfLink和EditLink属性的实体指向该实体的URI(第一个用于阅读,第二个用于编辑)。 – 2010-11-26 07:56:35
我需要投影来加载业务实体的轻量级列表以显示在用户界面上。当用户双击选定的投影时,我需要加载一个完整的(200列)实体。 – 2010-11-27 12:10:17