一起使用EF和MVC

时间:2012-10-11 20:40:30

标签: asp.net-mvc entity-framework-5

我想使用Entity Framework 5,我可以使用一个可以跨越两个或更多数据库的MVC模型。

这可能吗?

换句话说,有一个可以使用两个或更多数据库的EF模型。因为使用MVC,您只能在视图中使用1个模型。某些视图中的某些数据可能来自不同的数据库。为了在MVC中使用模型绑定器并将其映射到EF 5列,我需要完成此操作。

3 个答案:

答案 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/

主题的好文章