您是否在集合上使用[Composition]屬性?
使用RIA,您有兩種選擇來處理對象圖上的集合。如果使用[Composition]屬性,則只能通過父對象訪問這些子對象。如果您沒有使用[Composition]屬性,那麼您需要在DomainService上使用SEPARATE方法來處理這些對象的插入/更新/刪除。
舉個例子:下面是我保存對Ticket對象的更改的服務方法。 Ticket對象具有TicketAction項目的集合。這些項目被聲明爲[組成]屬性:
[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添加到機票,我們要門票關聯。 TicketId到TicketAction.TicketId,以便它將被保存。我沒有使用NHibernate(我們正在使用ADO.NET對付Oracle;不要問),但重點不在於技術;這是你需要得到正確的關鍵。
如果在此類場景中沒有使用[Composition]屬性,則必須爲TicketAction對象分別使用Insert和Update方法,因爲RIA將首先調用這些方法,然後調用TicketUpdate方法。
這有道理嗎?