簡體   English   中英

將實體框架與現有模型一起使用

[英]Using Entity Framework with Existing Models

我正在研究一個MVC4項目,該項目將需要使用許多不同的數據庫,每個數據庫都有一些用於搜索的存儲過程。 該站點是資產查詢工具,需要查詢各種現有系統。 如果我允許EF自己生成模型,那么我將為在每個數據庫中使用的每個過程最終得到一個模型。

我希望已經定義了自己的POCO模型,並且EF將其結果映射到該模型。 因此,無論從哪個數據庫中獲取數據,都將映射回同一模型。 每個數據庫中的列名略有不同,因此確實需要將列映射到模型屬性。

沒有寫回數據庫的操作,它純粹是選擇數據。

在“編輯函數導入”表單上,我可以基於結果創建模型。 還有一個選項可以查看“功能導入映射”,但它似乎沒有執行我想要的操作。

還有其他人嘗試過嗎?

添加了一張圖片以幫助解釋問題

描述數據訪問

到目前為止,我管理的最接近的數據庫是EDMX1查詢2數據庫。 這僅起作用,因為它們位於同一台Db服務器上。 我必須完全限定存儲過程中的Db名稱。 然后,我可以將1 EF模型用作2個查詢的返回類型。 但是,該模型仍然無法在其他EDMX中使用,因此,如果我需要連接到其他Db服務器,則仍然無法共享該模型。 因此問題沒有解決。

這是當前進度的圖像。

到目前為止的進展

函數導入映射用於將存儲過程/函數調用映射到EF代碼。 除非您使用存儲的proc(在EF中90%的時間都行不通-僅對更復雜的過程使用存儲的proc),否則這在這里並不重要。

就其本質而言,EF上下文只能有一個與其關聯的數據庫。 您需要創建多個上下文才能一次訪問多個數據庫。

在您的情況下,我要做的是為每個數據庫創建一個數據庫優先的架構(.edmx)文件,然后在其上方編寫一個服務層抽象,以使您可以將數據展平為所需的模型。 不管我一次正在處理多少個數據庫,這都是我一直在做的事情。 您幾乎已經在第一個圖中概述了這一點。 服務層可能具有多個類(例如,對於博客網站,您可能具有BlogService,UserService,CommentService等),每個類都包含您從應用程序層調用的方法。

我整理了一個快速圖表,可能有助於解釋

http://www.gliffy.com/go/publish/image/4818386/L.png

服務層完成所有EF工作,而應用程序層(或業務層,無論您想稱呼它)將完成所有業務邏輯。

此設置非常適合TDD和依賴注入/ IoC。 一切都整齊而完美地分開了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM