繁体   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