2009-07-23 51 views
1

我有這個項目,我希望從常規的ADO.NET代碼轉向更高效,更易理解,更精簡和更先進的OR/M系統。我目前的工作,但有以下情形與OR/M的工作,以及:切換到OR/M。在保存對象時寫入文件

訂單:

  • ID
  • 東西

文件:

  • id
  • ORDER_ID
  • 路徑

當我創建一個新的訂單我附上的文件。這個文檔給出了一個二進制數據(一個PDF文件)的數組,當我保存它時,它將二進制內容寫入到已定義的路徑中。這一切都有效,甚至是交易。

現在,是否有可能使用OR/M複製相同的行爲?顯然這是我必須在生成的OR/M代碼之上手動編寫的東西,但它可以在Linq-to-SQL或nHibernate中使用嗎?你會推薦哪一個?我怎麼把它掛起來做到這一點?

在我的應用程序中還有一些其他默認較少的行爲,我覺得有點難以複製。

卡:

  • ID
  • 串行
  • PUK

調制解調器:

  • ID
  • 串行
  • IMEI

訂單:

  • ID
  • 東西

OrderLines:

  • ID
  • ORDER_ID
  • 東西

OrderLineContents:

  • ID
  • orderline_id
  • identifier_name
  • identifier_id

我在這裏要做的是將特定卡或特定調制解調器連接到OrderLine。例如,通過在「identifier_name」和「id 1」中插入「調制解調器」。這個系統目前與ADO.NET一起工作,但我再一次懷疑它在OR/M中是多麼容易複製。我已經讀過L2S只支持單表繼承,我認爲這顯然是某種多態多表「事物」。

任何與此有關的幫助將得到極大的讚賞:)我尋求一個系統,可以做這兩種情況,或者如果沒有其他選擇,可能會改變第二種情況有點不同。

回答

0

我肯定會推薦NHibernate。你提到的所有東西都是可能的。 第一種情況非常簡單:

實例化實體並在其上設置數據。將文件保存到磁盤。堅持數據庫中的實體。

包裝整個事情我try-catch-finally來解決需要回滾事務或刪除損壞的文件的異常。

至於「identifier_name」部分,您可以使用單表和連接表類型的繼承映射。但是你的類應該共享一個通用的基類來這樣做。另一種方法 - 比較你當前的方法,但我不確定我會推薦你​​的情況 - 使用NHibernate支持的「任何」映射。

/Asger

+0

任何映射看起來真的很有趣:) Thx! – SpoBo 2009-07-24 15:10:35