![](/img/trans.png)
[英]How do I pass data from presentation layer to business logic layer? (ASP.NET MVC 5)
[英]How to make the data access technology (Entity Framework) ignorance from the presentation layer (ASP.NET MVC)?
前提:
我正在执行域驱动设计,并将解决方案分为4层:
域层仅具有一组为聚合定义的存储库接口,这取决于基础结构层中隐藏实现细节的实现数据访问机制。
在本练习中,我决定使用实体框架数据库优先方法。 当然,基础结构项目中有一个app.config
,其中包含一个连接字符串。
问题:
好的,我花了大量时间来尝试分离所有问题并专注于领域模型。 在表示层(即API和MVC项目)中,没有直接引用基础结构项目。 并且已经设置了IoC容器,因此所需接口的所有具体实现都将注入到控制器构造函数中。
例如,当我选择API项目作为开始项目并运行它时,我得到了
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code.
Additional information: No connection string named 'xxxxxx' could be found in the application config file.
题:
现在,我知道如果将Entity Framework安装到API项目中,将基础结构项目的app.config
中的连接字符串复制并粘贴到API项目的web.config
中,则一切正常。 但这违反了我们分离关注点的初衷,不是吗? 如果这样做,那么使用域驱动设计并使表述层的数据访问技术变得无知的意义何在?
我们之所以没有直接引用数据访问技术的直接实现(即,使用dbContext
和Linq
具体实现)的原因是,我们可以轻松地将地下访问技术转换为其他东西。
那么什么是正确的方法呢?
我不想在表示层中安装Entity Framework,也不想在各处复制连接字符串。 我希望所有数据访问和存储库的具体实现都存在于一个库中。
实体框架配置必须在使用它的项目中。 这并不意味着它将破坏您的分层结构或您的关注点分离。
从您的app.config中删除所有entityframework元素。 创建您自己的连接字符串元素,并在应用启动时将其提供给entityframework。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.