Utilisez-vous l'attribut [Composition] sur vos collections?
Avec RIA, vous avez deux options pour gérer les collections sur un graphe d'objets. Si vous utilisez l'attribut [Composition], ces objets enfants sont uniquement accessibles via l'objet parent. Si vous n'utilisez pas l'attribut [Composition], vous avez besoin de méthodes SEPARATE sur votre DomainService pour gérer l'insertion/la mise à jour/la suppression de ces objets.
À titre d'exemple: Voici une méthode de service dont j'ai sauvegardé les modifications dans un objet Ticket. L'objet Ticket possède une collection d'éléments TicketAction. Ces articles sont déclarés à la [Composition] attribut:
[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;
}
}
La méthode de service pour la mise à jour de ces ressemble à ceci:
public void Update(Ticket ticket)
{
foreach (var ticketAction in ticket.TicketActions)
{
if (ticketAction.IsNew)
ticketAction.TicketId = ticket.TicketId;
}
_ticketDataSource.Update(ticket);
}
Pour les nouveaux TicketActions ajouté au billet, il faut associer le billet. TicketId à l'TicketAction.TicketId afin qu'il soit enregistré. Je n'utilise pas NHibernate (nous travaillons ADO.NET contre Oracle, ne demandez pas), mais le point n'est pas le tech; c'est que vous devez obtenir les clés associées correctement. Si vous n'utilisez pas l'attribut [Composition] dans ce type de scénario, vous DEVEZ avoir une méthode Insert et Update distincte pour les objets TicketAction car RIA appellera d'abord ces méthodes, puis appellera la méthode TicketUpdate.
Est-ce que cela a du sens?