Допустим, у вас есть объект домена с бизнес-логикой для инициализации значений по умолчанию. Э.Г.
class User : IUser, Entity
{
public User()
{
StartDate = DateTime.Now;
EndDate = StartDate.AddDays(3); // This value could be user-configured.
}
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
Используя службы RIA, DTO, который будет сгенерирован, конечно же, не содержит никакой логики, только общедоступные свойства. Это означает, что когда клиент (например, приложение Silverlight) отображает диалоговое окно «Создать нового пользователя», он не сможет заполнить поля какими-либо значениями по умолчанию (без, конечно, дублирования бизнес-логики на клиенте).
В попытке добиться этого я создал новый DTO (UserDTO) и запрос в моем UserDomainService:
// Construct a new domain entity and then convert to DTO
public UserDTO CreateNewUser()
{
var user = new User(); // Business logic has now been executed.
return new UserDTO(user);
}
Это позволяет клиенту заполнять поля значениями по умолчанию, однако, когда приходит время добавить вновь созданного пользователя, RIA уже добавила UserDTO в свою внутреннюю коллекцию сущностей, поэтому вы не можете вызывать .Add в своем домене. контекст. Вы все еще можете просто вызвать SubmitChanges, что вызовет метод [Update], однако это, похоже, идет вразрез с тем, как предполагается использовать службы RIA (то есть вы не должны выполнять операцию INSERT в ОБНОВЛЕНИЕ метода).
Достижим ли этот сценарий (т. Е. Создание DTO на стороне сервера) в службах RIA?