![](/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.