一千萬個為什麽

搜索

切換到OR/M。在保存對象時編寫文件

我有這個項目,我希望從常規的ADO.NET代碼轉向更高效,更易理解,更精簡和更先進的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只支持單表繼承,我認為這顯然是某種多態多表“事物”。

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

最佳答案

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

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

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

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

/導演Asger

轉載註明原文: 切換到OR/M。在保存對象時編寫文件