通过wcf创建对象时隐藏id属性?

时间:2011-04-09 09:30:08

标签: .net wcf

如果我有像这样的简单添加方法

public void AddUser(User user)
{
        user.Id = Guid.NewGuid();
        _userList.Add(user);
}

和用户类一样

[DataContract]
public class User
{

    [DataMember]
    public Guid Id { get; set; }
    [DataMember]
    public string FirstName { get; set; }
    [DataMember]
    public string LastName { get; set; }
    [DataMember]
    public DateTime DateCreated { get; set; }        
}

添加新对象时是否可以隐藏用户ID。 我知道我可以通过参数化输入法(将每个对象属性作为输入参数发送)来实现这一点,但我认为不适合wcf模型。如果我有很多属性怎么办?这只是一个简单的例子。


wcf test client screen

3 个答案:

答案 0 :(得分:1)

  

添加新对象时是否可以隐藏用户ID。我知道我可以通过参数化输入法(将每个对象属性作为输入参数发送)来实现这一点,但我认为这不符合wcf模型。

不是使用相同的DTO甚至是Entity对象本身来实现服务Get方法和Add方法,而是最好有

UserResult方法的单独GetUser DTO:

public class UserResult
    public ID as Guid
    public FirstName as String
    public LastName as String
    public DateCreated as DateTime
end class

public class UserService
    public function GetUser(ID as Guid) as UserResult
end class

以及UserAddCommand方法的单独AddUser DTO:

public class UserAddCommand
    public FirstName as String
    public LastName as String
end class

public class UserService
    public function AddUser(Command as UserAddCommand) as Response
end class

用户ID甚至DateCreated都是在AddUser服务方式的服务端创建的。

答案 1 :(得分:0)

希望我的意见对你或你的开发范围有意义。

好吧,我认为你的guid应该在你的add方法中生成,而不是在对象属性中传递。我给方法提供了判断生成的guid是否有效的可能性,并且你可以尝试使用新的guid,直到你获得有效的guid。

我不知道是否可以在此工具中隐藏此内容,因为您已将ID标记为DataMember,这意味着您的属性可用。

如果以前的消化对你有意义,那么就忘记这个方法中的这个值。如果不是我能看到的唯一解决方案是创建一个没有这个成员的新类。

希望它可以帮到你

答案 2 :(得分:0)

如果删除[DataMember]属性,则WCF将无法使用GUID,因为它不会被序列化。 但是,如果它们与后端数据库绑定,那么当在服务的任何一侧使用用户对象时,这会出现问题吗?你不是一直在创建新的用户对象吗?