0

标题是不言自明的。

我有一个基础 WCF DataContract,我们称它为PersonContract,它涵盖了Person我数据库中实体的所有字段。

我有许多客户端应用程序通过该服务实现的不同接口的端点调用相同的服务。这是因为(除其他差异外)我希望这些应用程序中的每一个都能够仅访问和编辑Person实体的特定子集。

现在,如果我想定义一个包含PersonContract除一个之外的所有属性的合同,我可以子类化PersonContract并忽略子类中的单个属性吗?还是我唯一的选择是从最小的子集构建合同(但我怀疑我是否可以完全避免重复代码)?

4

1 回答 1

1

出于好奇,我做了一些测试,但看起来它不起作用。

以下是我使用的数据合约:

[DataContract]
public class Person
{
    [DataMember]
    public virtual string FirstName { get; set; }

    [DataMember]
    public virtual string MidName { get; set; }

    [DataMember]
    public virtual string LastName { get; set; }
}

[DataContract]
public class Person2 : Person
{
    [IgnoreDataMember]
    public override string MidName { get; set; }
}

还有我的服务合同:

public interface IService1
{
    [OperationContract]
    Person GetPerson();

    [OperationContract]
    Person2 GetPerson2();
}

两个操作返回相同的结果。

您可能能够产生您正在寻找的结果的另一种方法可能是定义您的最小合同(缺少排除属性的合同)并从中继承添加其他操作所需的字段。

等效的数据合同看起来像:

[DataContract]
public class Person2 : Person
{
    [DataMember]
    public virtual string MidName { get; set; }
}

[DataContract]
public class Person
{
    [DataMember]
    public virtual string FirstName { get; set; }

    [DataMember]
    public virtual string LastName { get; set; }
}

而且我已经验证结果与我预期的一样。

于 2013-08-31T21:03:23.840 回答