我有一個自定義存儲過程,在返回不同表的字段的參數如何我可以將此自定義存儲到實體?我只想使用只讀值作爲報告我不想保存或類似的東西我嘗試將額外的字段添加到最相似的實體,但是當我在代碼中執行該方法時額外的字段爲空codefluent自定義存儲過程
1
A
回答
1
解決方案1:使用視圖
視圖允許彙總來自不同實體的數據。
<Article>
<Id />
<Name />
<Lines typeName="LineCollection" />
<cf:method name="LoadArticlesByCommand" body="load(string commandName) from ArticleByCommand where CommandName = @commandName" />
<cf:view name="ArticleByCommand" autoLightweight="true">
<ArticleName expression="Name"/>
<ArticleQty expression="Lines.Quantity" />
<CommandName expression="Lines.Command.Name" />
</cf:view>
</Article>
<Command>
<Id />
<Name />
<Lines typeName="LineCollection" />
</Command>
<Line setType="List">
<Article typeName="Article" key="true" />
<Command typeName="Command" key="true" />
<Quantity typeName="int" />
</Line>
- http://blog.codefluententities.com/2014/04/22/views-auto-lightweight-and-the-modeler/
- https://www.softfluent.com/documentation/Views_PersistentViews.html
解決方案2:使用輕型實體
而不是創建一個視圖,你可以可以創建一個包含只使用了性能的輕質實體由存儲過程。
<cf:entity name="Person" lightweight="true">
<cf:property name="FirstName" typeName="string" />
<cf:property name="lastName" typeName="string" />
<cf:method name="ComputeBalance"
body="load() raw"
rawBody="SELECT 'John' AS FirstName, 'Doe' AS LastName" />
</cf:entity>
解決方案3:自定義映射
對於更具體的數值或類型,可以提供定製的方法,將數據庫中的值映射到.NET類型。這個自定義方法將以DataReader
作爲參數被調用,這意味着開發人員可以做他想做的任何事情。
<cf:entity name="Sample">
<cf:method name="LoadPair" body="raw" rawBody="SELECT 1234,5678"
returnTypeName="CodeFluent.Runtime.Utilities.Pair<System.Int32,System.Int32>"
cfom:methodName="On{0}" />
<cf:snippet>
private static CodeFluent.Runtime.Utilities.Pair<int,int> OnLoadPair(System.Data.IDataReader reader)
{
return new Pair<int, int>(reader.GetInt32(0), reader.GetInt32(1));
}
</cf:snippet>
</cf:entity>
您還可以使用OnAfterReadRecord
或OnBeforeReadRecord
規則
0
如果你比另一個選擇是使用內置的數據集的支持自定義存儲過程的結果映射到實體它不是必需的。
http://blog.codefluententities.com/2011/06/22/dataset-support-in-codefluent-entities/
<cf:method name="LoadAllCities" body="raw" returnTypeName="System.Data.DataSet">
SELECT $Address::City$ FROM $Address$
</cf:method>
。
DataSet ds = Address.LoadAllCities();
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
Console.WriteLine("City: " + row[0]);
}
}
0
在重新閱讀你的問題時,我提供了另一個答案。
爲了迴應你說的部分「我嘗試將額外的字段添加到最相似的實體,但是當我在代碼中執行該方法時額外的字段爲空」。以下步驟應該能夠解決這個問題。
- 在SQL Management Studio中執行一個自動創建的存儲過程。
- 執行手動創建的存儲過程。
- 驗證兩個存儲過程返回的字段名是否匹配。
我認爲上述將解決您的直接問題,但我仍然不喜歡解決方案。原因是你說你選了最相似的實體。我認爲這將在將來導致問題,尤其是如果存儲過程未映射到所有實體屬性。
我會推薦輕量級實體,視圖或數據集。
相關問題
- 1. 修改存儲過程是否更新存儲過程定義?
- 2. Gooddata - 自定義屬性存儲桶 - 自定義過濾器
- 3. 存儲過程中的MySQL定義器
- 4. 更改存儲過程定義器
- 5. 在存儲過程(Informix)中自定義「WHERE」?
- 6. 在存儲過程中添加自定義消息
- 7. 存儲過程中的自定義表類型sap hana
- 8. Spring集成jdbc存儲過程自定義rowmapper
- 9. 使用存儲過程在ASP Gridview中自定義分頁
- 10. 從存儲過程返回自定義值
- 11. c#WCF DataService + EntityFramework自定義存儲過程
- 12. 存儲過程中的自定義錯誤
- 13. 執行返回自定義光標的存儲過程嗎?
- 14. 與自定義類型工作的存儲過程
- 15. 問題與淨層次不生成自定義存儲過程
- 16. 映射自定義實體的存儲過程
- 17. ASP.net MVC調用存儲過程,選擇自定義列
- 18. SAS存儲過程 - 重用自定義場景分析
- 19. 創建自定義函數或存儲過程
- 20. 在存儲過程中創建自定義列postgres
- 21. 實體框架和存儲過程與自定義實體
- 22. 調用存儲過程與自定義類型參數從C#?
- 23. EF Core自定義存儲過程的結果
- 24. 如何使用存儲過程實現Gridview自定義分頁?
- 25. 實體框架存儲過程插入自定義序號
- 26. 自定義Django存儲
- 27. FLENS的自定義存儲
- 28. Android,存儲自定義ArrayList
- 29. 自定義持久存儲?
- 30. NHibernate - 存儲/導出存儲過程定義