0

我有一個關於使用RIA服務(使用Silverlight 4.0)插入具有從屬實體的實體的問題。使用RIA服務插入實體和從屬實體

假設我在我的(sql)數據庫中有一個名爲「Beer」的實體和一個名爲「Supplier」的實體,其關係爲:Beer 1 - n供應商。一種啤酒有多個供應商。

現在有以下用例:用戶輸入一個新的啤酒,比方說5個供應商。

在silverlight視圖上,我現在有兩個DomainDataSource的。在啤酒DomainDataSource我添加並提交新啤酒,並在供應商DomainDataSource我提交現在的供應商,其中包含一個外鍵,將他們鏈接到啤酒。

我的問題是:我怎樣才能確保啤酒獲得第一次提交和之後的依賴(記住外鍵)供應商?

我知道,我可以簡單地鏈接使用OnSubmitted事件的SubmitChanges()。但是這個解決方案很好......蹩腳。它使一些非常醜陋的代碼。

感謝您的衆多想法!

回答

1

不幸的是,沒有辦法強制進入同一ChangeSet的更新順序。

但是,如果所有新的供應商提交新的啤酒服務器(一個大的IF),你可以手動檢查變更您的Upddate方法:

public void UpdateBeer(Beer beer) 
{ 
    foreach(ChangeSetEntry changeSetEntry in ChangeSet.Entries) 
    { 
     if (changeSetEntry.Entity.GetType() == typeof(Supplier)) 
     { 
      Supplier supplier = (Supplier)changeSetEntry.Entity; 
      UpdateSupplierInternal(supplier); 
     } 
    } 

    DataContext.Beers.Attach(beer, ChangeSet.GetOriginal(beer)); 
} 

調用一個單獨的方法來更新供應商。你仍然需要一個UpdateSupplier方法,否則RIA會在ChangeSet中存在異常時拋出異常,但該方法不應該做任何事情:

public void UpdateSupplier(Supplier supplier) 
{ 
    // do nothing 
} 
+0

我擔心會這樣,謝謝! – 2010-11-07 14:50:45

相關問題