我已經使用了Silverlight的最近/ RIA Services項目db4o的面向對象數據庫系統考慮,但有,我可以上使用一些建議一點 - 如何使協會的工作。 RIA Services要求您用AssociationAttribute標記所有關聯的實體。 AssociationAttribute的構造函數要求您指定實體對關聯實體的關鍵字以及關聯實體本身的關鍵字。DB4O使用Silverlight RIA服務
作爲一個例子,假設我有CarID和汽車性能和Car類一個賽車類具有ID屬性。我的賽車類將是這個樣子:
class Racer
{
public int ID { get; set; }
public int? CarID { get; set; }
[Association("Racer_Car", "CarID", "ID")]
public Car Car { get; set; }
}
,我使用了db4o(或任何OODBMS)是一個外鍵和主鍵不這樣做,而不必,有看到的問題 - 其結果是,我不需要Racer.CarID和Car.ID屬性。爲了在RIA服務中做到這一點,我需要創建自己獨特的密鑰,我不介意,我只是不知道這樣做的最佳方式。
所以,我對你的問題是「你將如何創建這些鍵/ IDS」?
由於沒有任何自動遞增生成字段的概念(我不知道任何方式),我將不得不選擇嘗試手動,安全地遞增鍵或使用類似Guid 。由於前者更難以用多個用戶和/或多線程進行管理,因此我認爲使用Guid將是最簡單的解決方案。
因此,讓我們考慮使用GUID。最簡單的解決方案是創建我的ID屬性,就像我在上面的例子中那樣,但是使用Guid而不是int。我需要創造新的實體後,將ID設置爲一個新的GUID - 那時,每當我設置的Racer.Car財產,我也需要設置Racer.CarID。
這麼做其實就是用手將容易出錯,所以我想了很多,在性能getter和setter方法處理,但我不知道的最好的方式來實現這一點。
這就是我到目前爲止想到的。我想我會研究Linq-to-SQL生成的代碼如何處理這些問題 - 也許我會在那裏找到一些線索。
任何建議將不勝感激。
感謝,
- 查爾斯