我想使用Entity Framework 5,我可以使用一个可以跨越两个或更多数据库的MVC模型。
这可能吗?
换句话说,有一个可以使用两个或更多数据库的EF模型。因为使用MVC,您只能在视图中使用1个模型。某些视图中的某些数据可能来自不同的数据库。为了在MVC中使用模型绑定器并将其映射到EF 5列,我需要完成此操作。
答案 0 :(得分:2)
ASP.NET MVC不依赖于实体框架。
ASP.NET MVC是一个用于构建坚持使用模型视图控制器模式的Web应用程序的框架。 它不受Entity框架的限制。它可以与任何数据访问技术一起使用,如LINQ2SQL / Entity Framework / Pure ADO.NET等。这意味着您可以使用或不使用Entity Framework来开发MVC应用程序。
我假设你想从2个不同的数据库中获取数据并加载模型对象。您可以通过编写一个select查询来完成此操作,该查询从2个数据库获取数据并将其放入Stored过程并将该proc放入您的DbContext正在与之通信的数据库中。然后执行存储过程并加载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 A.CustomerID=@id
END
要使用Entity框架执行存储过程,您可以使用Database.SqlQuery
方法
var idParam = new SqlParameter { ParameterName = "@Id", Value = 414};
var result = context.Database.SqlQuery<Customer>
("exec GetCustomer @Id", idParam).ToList();
这将执行你的proc并将数据加载到Customer
类的实例,假设结果集结构和你的模型类结构看起来相似。
您可能需要调整存储过程的权限以从相关数据库/表中读取数据。
答案 1 :(得分:0)
Shyju所说的是MVC不关心或了解您的Entity Framework数据模型或数据库。因此,MVC模型可以跨越两个数据库的想法就像是说飞机可以跨越两个锤子。
答案 2 :(得分:0)
如上所述,MVC中的M就是你想要的。 Microsoft没有指定Model实际上是什么。它当然不一定是EF模型(尽管MS的一些代码样本使用它作为例子)
我建议M应该是ViewModel,并且应该与您的数据层无关。然后使用像Automapper这样的工具从域模型映射到ViewModel。 ViewModel封装您要显示的数据以及要显示的任何特定Web视图特定信息。然后,当您回发ViewModel时,您可以使用它来更新域模型相应的字段等,并将其保留到两个数据库。这是一篇关于ViewModels http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/
主题的好文章