2012-10-11 30 views
1

我想使用實體框架5,從中我可以使用一個可以跨越兩個或更多數據庫的MVC模型。一起使用EF和MVC

這可能嗎?

換句話說,有一個EF模型可以使用兩個或多個數據庫。因爲使用MVC,您只能在View中使用1個模型。有些視圖的某些數據可能來自不同的數據庫。爲了在MVC中使用模型綁定器並將其映射到EF 5列,我需要完成此操作。

回答

2

ASP.NET MVC不依賴實體框架。

ASP.NET MVC是一個用於構建Web應用程序的框架,該框架支持Model View Controller模式。 它不受實體框架限制。它可以與任何數據訪問技術一起使用,如LINQ2SQL/Entity Framework/Pure ADO.NET等。這意味着您可以使用Entity Framework或不使用Entity Framework來開發MVC應用程序。

我假設你想從2個不同的數據庫獲取數據並加載模型對象。你可以通過編寫一個從2個數據庫獲取數據的選擇查詢並將其放入Stored過程,並將該過程放到您的DbContext正在與之通信的數據庫中。然後執行存儲的proc並加載Model對象。

從2個數據庫

CREATE PROCEDURE GetCustomer(@id int) 
AS 
    BEGIN 
    SELECT C.ID,A.DateReceived 
    FROM FirstServerName.DbName.dbo.Customer C 
    INNER JOIN SecondServerName.DbName.dbo.Applications A 
    ON A.CustomerID=C.CustomerID 
    AND [email protected] 
    END 

獲取數據執行與實體框架的存儲過程的樣本程序,可以使用Database.SqlQuery方法

var idParam = new SqlParameter { ParameterName = "@Id", Value = 414}; 
    var result = context.Database.SqlQuery<Customer> 
             ("exec GetCustomer @Id", idParam).ToList(); 

這將執行你的proc和加載數據到Customer類的實例,假設結果集結構和模型類結構看起來相似。

您可能需要調整存儲過程的權限以從相關數據庫/表中讀取數據。

+0

(Database First method) – sagesky36

+0

然後,我要做的就是簡單地從兩個數據庫中創建一個模型到一個模型中,並使用這個模型而不是每個單獨的edmx模型。對? – sagesky36

+0

您的評論都是很棒的點子,謝謝....我會這樣做的。我在將EF通過edmx文件生成的兩個模型組合在一起看到的唯一問題是,一旦將模型合併,數據庫中的任何模式更改都必須在我新組合的模型中手動更新..... – sagesky36

0

Shyju說的是MVC不關心或瞭解你的Entity Framework數據模型或數據庫。因此,MVC模型可以跨越兩個數據庫的想法就像是說一架飛機可以跨越兩個錘子。

0

如上所述,MVC中的M就是你想要的。微軟並沒有指定實際的模型。它當然不一定是EF模型(儘管一些MS代碼示例使用該模型作爲示例)

我建議M應該是ViewModel,並且應該與您的數據層無關。然後使用像Automapper這樣的工具將域模型映射到ViewModel。 ViewModel封裝了您想要顯示的數據以及您想要顯示的任何特定的Web視圖特定信息。然後,當你回發ViewModel時,你可以使用它來更新領域模型適當的領域等,並堅持這兩個數據庫。這是一篇關於ViewModels主題的好文章http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/