我对 WCF 大师有一个新问题。
所以,我有一个类User
接近数据库中用于数据库操作的“用户”表示。现在,我想要 2 个不同的服务合同,将此类用作数据合同,但每个服务合同都有自己的方式......我的意思是,
public class DBLayer
{
void InsertUsers(List<User> userList)
{
// both 'PropertyVisibleForService1' and 'PropertyVisibleForService2'
// are used HERE to be inserted into their columns
}
}
[DataContract]
public class User
{
[DataMember] public string PropertyVisibleOnlyForService1{...}
[DataMember] public string PropertyVisibleOnlyForService2{...}
}
[ServiceContract]
public interface IService1
{
List<User> GetUsers(); // user with 'PropertyVisibleOnlyForService1' inside
}
[ServiceContract]
public interface IService2
{
List<User> GetUsers(); // user with 'PropertyVisibleOnlyForService2' inside
}
因此,这个想法是每个服务将获得不同类型的用户,即'User'
. 请记住,我想按'User'
原样使用数据库操作,我有什么选择来实现这一点?我真的需要创建不同的数据合约还是有其他更聪明的方法?
最好的办法不仅是给我解决方案,还要向我解释一些最佳实践和替代方案。
先感谢您。
EDIT1:我在这里添加了一个虚拟 DBLayer 类以获得更好的概述,以及为什么我认为在这种情况下继承可能不好。
一个解决方案是使用另一个 ' UserForService1
' 和 ' UserForService2
' 作为数据合约,它们将在最后从/到一个 ' User
' 映射,但我想要一些其他的观点。
EDIT2:非常好的文章在这种情况下对我有帮助:http: //bloggingabout.net/blogs/vagif/archive/2009/03/29/iextensibledataobject-is-not-only-for-backward-compatibility.aspx