Используете ли вы атрибут [Composition] в своих коллекциях?
С RIA у вас есть два варианта для обработки коллекций на графе объектов.Если вы используете атрибут [Composition], то эти дочерние объекты доступны только через родительский объект.Если вы не используете атрибут [Composition], вам понадобятся методы SEPARATE на вашем DomainService для обработки вставки / обновления / удаления этих объектов.
Например: вот мой сервисный метод, который сохраняет изменения в объекте Ticket.У объекта Ticket есть коллекция элементов TicketAction.Эти элементы объявляются с атрибутом [Composition]:
[MetadataType(typeof (TicketMetadata))]
public partial class Ticket
{
internal sealed class TicketMetadata
{
[Key] public int TicketId;
[Required]
public DateTime IncidentDate;
[Include]
[Composition]
[Association("Ticket_TicketActions", "TicketId", "TicketId")]
public List<TicketAction> TicketActions;
}
}
Сервисный метод для обновления этих выглядит следующим образом:
public void Update(Ticket ticket)
{
foreach (var ticketAction in ticket.TicketActions)
{
if (ticketAction.IsNew)
ticketAction.TicketId = ticket.TicketId;
}
_ticketDataSource.Update(ticket);
}
Для новых TicketActions, добавленных в билет, мы должнысвяжите Ticket.TicketId с TicketAction.TicketId, чтобы он был сохранен.Я не использую NHibernate (мы работаем ADO.NET против Oracle; не спрашивайте), но дело не в технологии;это то, что вам нужно правильно связать ключи.
Если вы не используете атрибут [Composition] в сценарии этого типа, тогда вы ДОЛЖНЫ иметь отдельный метод Insert и Update для объектов TicketAction, поскольку RIA сначала вызовет эти методы, а затем вызовет метод TicketUpdate.
Имеет ли это смысл?