ORM用於具有半靈活架構設計的數據庫

c# dapper orm petapoco sql

我喜歡Dapper,Massive,PetaPoco等的“微觀”方法,我喜歡控制我們發送到數據庫的SQL,大部分時間它都比較簡單。我也喜歡使用POCO,但是在處理有點靈活的架構設計時,你經常會遇到麻煩:)

假設我們有一個Person實體,它總是具有以下屬性。

  • ID
  • 名稱
  • 電子郵件
  • 電話

但在某些情況下,可能會有其他屬性,如

  • SpecialPhoneNumber
  • VeryCustomValue

我真的很喜歡POCO,它具有我們知道的常見屬性。但是在密鑰/值集合中可以訪問其他對象。

什麼是最好的方法?並且所提到的任何“mirco-orm”都支持這個嗎?我已經看了他們所有,但沒有發現任何跡象表明他們這樣做,但也許我錯過了一些東西。

是否可以直接使用SqlDataReader執行此操作?或者在使用反射來創建對象時,讀取數百行的性能會不好?所提到的orm似乎都做得很好,我想在下面使用DataReader。

希望你能幫忙:)

編輯:我應該提一下,我們無法控制應用程序架構。這是一個ERP解決方案,允許個人客戶定制他們的應用程序和底層數據庫。在應用程序中添加字段會在數據庫中添加列。不好意思!首先不要說清楚

一般承認的答案

Massive可以支持這一點,因為它將數據實現為ExpandoObject的:

秘訣就是ExpandoObject。所有內容和Massive產生的一切都是一個Expando - 它可以讓你用它做任何你想做的事。在它的核心,ExpandoObject只是一個IDictionary <string,object>

ExpandoObject實現IDictionary<string, Object>IEnumerable<KeyValuePair<string, Object>> ,因此您可以以任何方式枚舉和測試成員。

Massive的默認設置是發出SELECT *查詢,因此ExpandoObject將包含表中的所有字段,即使是那些您不知道的字段。

你可以從Github獲得Massive的當前代碼

Dapper也可以選擇動態對象,但與Massive不同,它只能選擇數據,不能插入,更新或刪除它。編輯:審查Dapper文檔,它似乎可以執行修改,因為它可以執行任何SQL。有一些關於使用Dapper執行插入的最新信息


熱門答案

你可以看看nHibernate的動態映射。

http://ayende.com/blog/3942/nhibernate-mapping-dynamic-component

它允許您將這些擴展屬性檢索到通用Directory<string,object> 。因此,您的類具有此類通用包(字典)並動態擴展XML映射。

nHibernate將為您完成剩下的工作。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因