1

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

这可能吗?

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

4

3 回答 3

2

ASP.NET MVC 不依赖于实体框架。

ASP.NET MVC 是一个用于构建遵循模型视图控制器模式的 Web 应用程序的框架。它不受实体框架的限制。它可以使用任何数据访问技术,如 LINQ2SQL / Entity Framework / Pure ADO.NET 等。这意味着您可以使用或不使用 Entity Framework 开发 MVC 应用程序。

我假设您想从 2 个不同的数据库中获取数据并加载模型对象。您可以通过编写从 2 个数据库获取数据并将其放入存储过程并将该过程放入 DbContext 正在与之通信的数据库中的选择查询来做到这一点。然后执行存储过程并加载模型对象。

从 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

要使用实体框架执行存储过程,您可以使用Database.SqlQuery方法

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

这将执行您的 proc 并将数据加载到Customer类的实例中,假设结果集结构和您的模型类结构看起来相似。

您可能需要调整存储过程的权限以从相关数据库/表中读取数据。

于 2012-10-11T20:42:28.740 回答
0

如上 MVC 中的 M 就是你想要的。微软没有具体说明 Model 实际上是什么。它当然不必是 EF 模型(尽管 MS 的一些代码示例使用它作为示例)

我建议 M 应该是 ViewModel 并且应该与您的数据层无关。然后使用 Automapper 之类的工具从域模型映射到 ViewModel。ViewModel 封装了您想要显示的数据以及您想要显示的任何特定 Web 视图的特定信息。然后,当您回发 ViewModel 时,您可以使用它来更新域模型的适当字段等,并将其保存到两个数据库中。这是一篇关于 ViewModel 主题的好文章http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/

于 2012-10-11T22:04:06.667 回答
0

Shyju 的意思是 MVC 不关心或不了解您的实体框架数据模型或数据库。因此,一个 MVC 模型可以跨越两个数据库的想法就像说一架飞机可以跨越两个锤子。

于 2012-10-11T20:47:33.780 回答