我正在运行一个正在公开EDM的WCF数据服务。我需要在客户端有几个属性,数据库不需要知道。设置完所有后,我得测试SaveContext方法,并在服务器上获取此错误“错误处理请求流。为类型'DataModels.Customer'指定的属性名'CanDelete'无效。”
有没有办法告诉客户端的WCF数据服务忽略此属性?或者我应该转向RIA Serivces?我已经读过将属性设置为internal将执行此操作,但我需要绑定属性,并且我在不同的项目中使用客户端UI代码(将我的SL应用程序与数据服务分离)。
在我的客户端上:
public partial class Customer
{
private bool canDelete;
/// <summary>
/// Gets or sets a value indicating whether this instance can be deleted.
/// </summary>
/// <value>
/// <c>true</c> if this instance can delete; otherwise, <c>false</c>.
private bool canDelete;
/// <summary>
/// Gets or sets a value indicating whether this instance can be deleted.
/// </summary>
/// <value>
/// <c>true</c> if this instance can delete; otherwise, <c>false</c>.
/// </value>
public bool CanDelete
{
get
{
return this.canDelete;
}
set
{
if (this.canDelete != value)
{
this.canDelete = value;
this.OnPropertyChanged("CanDelete");
}
}
}
}
答案 0 :(得分:1)
我遇到了完全相同的问题,并在下面修改了一些代码 extending partial designer classes
它只是将ContextEntity事件挂钩在Context的部分类中。
我添加了自己的属性(IgnorePropertyAttribute),因此我可以将其附加到其他属性。
如果属性没有插入到第一位但这对我有用
当然会很好public sealed class IgnorePropertyAttribute : Attribute
{
}
...
partial void OnContextCreated()
{
this.WritingEntity += MyDataContext_WritingEntity;
}
private void MyDataContext_WritingEntity(object sender, System.Data.Services.Client.ReadingWritingEntityEventArgs e)
{
//
foreach (XElement node in e.Data.Elements())
{
if (node != null && node.Name.LocalName == "content")
{
foreach (XElement el in node.Elements())
{
if (el.Name.LocalName == "properties")
{
foreach (XElement prop in el.Elements())
{
if(e.Entity.GetType().GetProperty(prop.Name.LocalName).GetCustomAttributes(typeof(IgnorePropertyAttribute), true).Length > 0)
{
prop.Remove();
}
}
}
}
}
}
}