Скрыть свойство id при создании объекта через wcf? - PullRequest
1 голос
/ 09 апреля 2011

Если у меня есть простой метод добавления, подобный этому

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; }        
}

Можно ли скрыть идентификатор пользователя при добавлении нового объекта.Я знаю, что могу добиться этого с помощью параметризованного метода ввода (посылая каждое свойство объекта в качестве входного параметра), но я не думаю, что это соответствует модели wcf.А что если у меня много свойств?Это простой пример.

wcf test client screen

Ответы [ 3 ]

1 голос
/ 09 января 2016

Можно ли скрыть идентификатор пользователя при добавлении нового объекта. Я знаю, что могу добиться этого с помощью параметризованного метода ввода (отправка каждого свойства объекта в качестве входного параметра), но я не думаю, что это соответствует модели wcf.

Вместо того, чтобы использовать один и тот же DTO или даже сам объект Entity для службы Get и Add, лучше иметь

отдельный UserResult DTO для GetUser метод:

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 DTO для AddUser метод:

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 методе обслуживания.

0 голосов
/ 12 апреля 2011

Если вы удалите атрибут [DataMember], то GUID не будет доступен для WCF, поскольку он не будет сериализован. Однако может ли это представлять проблему при использовании пользовательских объектов на любой стороне службы, если они связаны с внутренней базой данных? Разве вы не будете постоянно создавать новые пользовательские объекты?

0 голосов
/ 09 апреля 2011

надеюсь, что мое мнение имеет смысл для вас или вашей области разработки.

ну, я думаю, что ваш guid должен быть сгенерирован внутри вашего метода add, а не передан внутри свойства объекта.я даю методу возможность решить, является ли сгенерированный guid действительным или нет, и вы можете попробовать новый guid, пока не получите действительный.

я не знаю, возможно ли это скрыть вэтот инструмент, поскольку вы пометили идентификатор как DataMember, а это означает, что ваше свойство становится доступным.

, если предыдущее предложение имеет смысл для вас, просто забудьте об этом значении в этом методе.если не единственное решение, которое я вижу, это создать новый класс без этого члена.

надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...