簡體   English   中英

在ASP.NET MVC中向模型添加查詢

[英]Add query to model in asp.net mvc

我的問題是,如何在asp.net mvc中的模型中添加自定義查詢,我所見過的所有教程都是在控制器中進行查詢的。

到目前為止,在我所有的閱讀中,所有內容都表明控制器不應該知道數據庫,所有查詢都應該在模型中進行,但是我似乎找不到任何示例。

我嘗試執行此操作,但是模型中沒有可用的DbContext,那么該怎么辦?

有多種方法可以實現此目的,每種方法各有利弊。 以下是一些方案:

1) 領域模型模式
領域模型模式的作者Martin Fowler提供了以下定義(Fowler,2003年):

包含行為和數據的領域的對象模型。

使用此模式,您的域模型將定義行為,這些行為可能會也可能不會轉換為數據庫查詢。

2) 儲存庫模式

使用存儲庫將檢索數據並將其映射到實體模型的邏輯與作用在模型上的業務邏輯分開。 業務邏輯應該與構成數據源層的數據類型無關。 例如,數據源層可以是數據庫,SharePoint列表或Web服務。

正如@Mehrdad指出的那樣,使用此模式可以釋放控制器DB的顧慮,並且所有DB邏輯都保留在一個位置。

3) 命令查詢分離模式 (我的最愛)

它指出,每個方法都應該是執行操作的命令,或者是將數據返回給調用方的查詢,但不能同時是兩者。 換句話說,提出問題不應改變答案。 更正式地講,方法僅在引用透明且因此沒有副作用的情況下才應返回值。

注意 :這是CQS而不是CQRS模式

CQS和存儲庫模式之間的區別在於,使用Entity Framework,DbContext已經為您包裝了存儲庫模式(DbContext是工作單元,DbSets是存儲庫)。 因此,創建另一個存儲庫層是多余的。 CQS為您提供了對查詢/命令的精細控制,並允許您通過裝飾器擴展它們,這些裝飾器可以處理其他邏輯而不會污染您的核心業務邏輯。 以下是有關CQS的一些很棒的鏈接:

這個答案是一個很好的例子,說明如何將存儲庫模式與CQS一起使用。

所有這些都可能會讓人不知所措,因此我建議您花些時間,使用這些模式來實施概念驗證項目,並確定哪種模式更適合您的總體架構。

例如,如果您有用戶實體,通常可以使用存儲庫模式:

public class UserRepository:IUserRepository{
  public List<User> GetUsers()
  {
     //Your code and query here
  }
  public void AddUser(User user)
  {
     //Your code and query here
  }
}

然后,將此類傳遞給UserController並調用其函數。 如您所見,我還添加了IUserRepository,以便在進行依賴注入時可以使用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM