我在爲我的下一個項目使用NetTiers進行評估。關於修改NetTiers的建議
問題是: 我的模式中的每個表都有一個AccountId字段。隨着對DAL的每個請求,我希望它成爲AccountId被傳遞並用作查詢中的過濾器的要求。
如果使用此參數產生了額外的重載,那將是可以接受的。
我懷疑這個功能是不是內置的,所以任何人都可以提供任何建議,從哪裏開始修改模板來添加它?
我在爲我的下一個項目使用NetTiers進行評估。關於修改NetTiers的建議
問題是: 我的模式中的每個表都有一個AccountId字段。隨着對DAL的每個請求,我希望它成爲AccountId被傳遞並用作查詢中的過濾器的要求。
如果使用此參數產生了額外的重載,那將是可以接受的。
我懷疑這個功能是不是內置的,所以任何人都可以提供任何建議,從哪裏開始修改模板來添加它?
修改NetTiers模板並不困難,一旦你知道自己生成的類的迷宮的方式,但它通常很繁瑣,而且很容易出錯。
我的第一個假設是,您生成的數據庫要麼只有幾個表,要麼是非規格化的 - 否則在每個表中都有一個AccountId列是沒有意義的。如果是後者且結構無法正常化,則認爲基於數據庫外鍵(包括DeepLoads)使用額外的AccountId過濾器來獲取所有構建它的導航屬性將是一個相當大的改變。
此外,您提到添加包含AccountId的重載將是一個可接受的解決方案。然而,這將保持現有NetTiers重載不需要ACCOUNTID參數任何DAL消費者...
總之,這裏的一些地區的總結,你會需要考慮修改:
爲了確保在沒有提供AccountId的情況下不能成功執行查詢(有很多方法可以通過例如GetPaged @where
子句規避默認DAL),您可能必須在SQL層進行更改。這些模板位於/DataAccessLayer.*Client/
文件夾中。假設你使用的是sql server,那麼可以修改生成Sql的文件(/DataAccessLayer.SqlClient/
StoredProcedureProvider.cst
),以確保始終傳遞@AccountId參數。
這將導致相關文件如/DataAccessLayer.SqlClient/SqlEntityProviderBase.generated.cst
和/DataAccessLayer/EntityProviderBaseCore.generated.cst
以及可能的/DataAccessLayer/EntityProviderBaseCoreClass.generated.cst
的更改。
這反過來會導致實體層(/Entities/
)的變化,例如EntityBaseCore.generated.cst
和EntityInstanceBase.generated.cst
。
我一般建議是,雖然NetTiers和CodeSmith的是選擇的工具,幾年前建設DALS,我不能建議走這條路,這些天。隨着微軟實體框架和開源NHibernate的發展,你不再需要深入研究數據訪問管道層(即使只是在代碼生成層面)。
一些優秀的技巧,從哪裏開始整個nettiers作爲一個整體,而不是具體的我的問題。謝謝 – 2011-04-13 09:34:49