MVC项目上的客户端代理缺少WCF数据服务联合字段

时间:2012-10-15 10:48:17

标签: asp.net asp.net-mvc silverlight wcf-data-services odata

我们正在使用WCF数据服务(当前的.NET 4 - 计划在某些时候升级到WCF Data Services 5)以从SQL DB中公开一些数据。我们将服务器端的数据投射到公共域模型中,然后通过Reflection提供程序公开数据。

这一切都很好,除了我最近在域模型中添加了一些联合细节,以便在例如Feed视图中看起来更好一些。 IE浏览器。这是我做过的事情: -

[DataServiceKey("ID")]
[EntityPropertyMapping("Name", SyndicationItemProperty.Title, SyndicationTextContentKind.Plaintext, false)]
public class Customer
{
    public String Name { get; set; }
    public String ID { get; set; }
    public Boolean IsActive { get; set; }
}

这正确地起作用,因为Feed正确地设置了辛迪加字段并且它很好地显示在IE中。此外,“名称”字段不再直接显示在数据的XML中。相反,当我在Console或Silverlight应用程序中获得客户端引用时,代理类就具有类似的属性(我已经省略了其他属性): -

[global::System.Data.Services.Common.EntityPropertyMappingAttribute("Name", System.Data.Services.Common.SyndicationItemProperty.Title, System.Data.Services.Common.SyndicationTextContentKind.Plaintext, false)]
[global::System.Data.Services.Common.DataServiceKeyAttribute("ID")]
public partial class Customer : global::System.ComponentModel.INotifyPropertyChanged { // etc. }

忽略INotifyPropertyChanged,主要是SyndicationItemProperty,我假设它允许客户端代理正确地正确地重新水化对象。但是,在我们的ASP .NET应用程序(WebForms或MVC)上,我们得到了这种行为: -

[global::System.Data.Services.Common.DataServiceKeyAttribute("ID")]
public partial class LegalEntity { // etc. }

即。它正确生成Key Attribute,但不生成Syndication Title属性,因此客户端不知道如何补充Name属性;相反,它只是返回null。如果我关闭联合发布,那一切都有效。

在我看来,建议生成代码的模板对于VS中的不同项目类型是不同的,并且MVC的问题不支持联合。

如何在不必手动创建部分类并使用额外属性进行装饰(或关闭联合)的情况下解决这个问题?

随后添加:

我现在发现不同之处在于,在ASP .NET项目的.datasvcmap文件中,缺少以下XML: -

<Parameters>
   <Parameter Name="UseDataServiceCollection" Value="true" />
   <Parameter Name="Version" Value="2.0" />
</Parameters>

添加它似乎可以解决问题。剩下的问题是为什么不自动添加?

由于

1 个答案:

答案 0 :(得分:1)

如果您使用命令行工具DataSvcUtil生成代码,则有1.0或2.0的版本开关:

http://msdn.microsoft.com/en-us/library/vstudio/ee383989(v=vs.100).aspx

看起来你得到版本为1.0的ASP / MVC输出和版本为2.0的Console / Silverlight - 可能只是巧合,但值得注意。

datasvcutil /out:c:\dnh.cs /uri:http://server/DataServices/Customers.svc/ /version:1.0
datasvcutil /out:c:\dnh.cs /uri:http://Server/DataServices/Customers.svc/ /version:2.0