2013-05-31 25 views
1

我是使用ASP.net MVC框架(也是C#)的新手。我有更多使用JSP + JSTL MVC框架的經驗。我想知道如何運行自定義查詢,如果我需要做更復雜的SQL。 在JSP框架中,我習慣於創建DAO來查詢在ASP.net中似乎不是這種情況的sql表。對於ASP.net,我注意到我們使用LINQ從模型中查詢DBSet對象。在ASP.NET MVC中運行自定義查詢

我的問題:

  1. 我在哪裏寫的自定義查詢的代碼?在模型中?
  2. 我該怎麼寫?它是否通過某種類型的db.execute語句?
  3. 我需要做什麼配置更改?
  4. 示例和其他資源將是不錯的。

我試着通過asp.net上的asp.net MVC教程尋找,但我找不到任何東西。

+0

您可以使用'SQLDataAdapter'並且可以執行自定義查詢。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter。aspx – ram2013

+1

有幾種方法可以做到這一點。閱讀[ADO.NET](http://msdn.microsoft.com/en-us/library/e80y5yhx.aspx)和[實體框架](http://msdn.microsoft.com/en-us/ data/ef.aspx)讓你開始。 – Brian

回答

2

你如何執行SQL查詢完全取決於你正在使用什麼數據訪問框架。您可以使用ADO.NET編寫純SQL,並以與您期望的方式類似的方式執行查詢。

回答第二部分問題時,應該在數據訪問層完成,並且與您的ASP.NET MVC應用程序本身完全無關。用於實例化和與抽象層中的類進行通信的任何必要邏輯都應駐留在您的控制器中(理想情況下,應用程序通過使用接口和/或服務層將其與應用程序鬆散耦合)。

從這個意義上說,是的,它屬於模型。但是,請記住,在概念上,ASP.NET MVC中的'M'是領域模型(即上述數據訪問層),而不是視圖模型。視圖模型只是一個獨立的包裝器,用於存儲給定視圖的相關數據,並且在大多數情況下應該完全沒有任何邏輯。

2

在JSP框架中,我習慣於創建DAO來查詢sql.net表 ,這在ASP.net中似乎不是這種情況。

這是非常相同的,你應該有一個單獨的DAL項目與你的DAO對象和引用那些從你的業務層(另一個單獨的項目)。 ASP.NET MVC項目本身將添加對業務層項目的引用,該項目反過來將添加對DAL的引用。這樣一來,你可以保持一個三層架構:

UI (ASP.NET MVC project) 
      | 
      | 
    Business Layer (POCO objects (= to POJO), validation, biz logic) - separate project(s), depending on whether you put your POCO objects in the same project or not. 
      | 
      | 
     Data Access Layer (You can use ADO.NET, EF (LINQ), etc.) 

的ASP.NET MVC應用程序通常由3個文件夾:ModelsViewsControllers但一切的是通常放置在Models文件夾是真的是你的業務對象,所以我傾向於完全擺脫該文件夾,我只剩下ViewsControllers文件夾。意見只是HTML標記,非常多。控制器類只是從業務層調用方法並將結果傳遞給視圖。因此,例如,UserController類將如下所示:

public class UserController : Controller 
{ 
     public ActionResult Index() 
     { 
      var allUsers = UserBusLayer.User.GetAll(); 
      return View(allUsers); 
     } 
} 
+0

如果您刪除此文件夾,您是否沒有代表數據的類? I.E.在你的DAL中,你是否使用sql查詢手動創建表? – de1337ed

+0

@ de1337ed如果您使用實體框架,則您編寫的LINQ查詢將返回'IEnumerable '(集合),其中'T'是一個POCO對象,具有與您在LINQ查詢中定義的屬性完全相同的屬性。例如,您的DAL中的代碼:var query = from db.Users中的c,其中c.ZipCode == 1234 select c;'將向Business Layer返回一個IEnumerable ',業務層將從DAL並將其映射到Business Objects。我使用AutoMapper輕鬆地將DAL對象映射到BO對象。 https://github.com/AutoMapper/AutoMapper/wiki/Getting-started – Icarus

+0

@ de1337ed最後,您的所有ASP.NET MVC項目都會看到您的BL中的Business Objects,而不是DAL返回的對象。請記住,ASP.NET MVC根本沒有對DAL的引用。我鼓勵你看看'AutoMapper'。一旦設置了映射,您就完成了編寫重複代碼以將對象從DAL映射到業務層的過程,反之亦然。 – Icarus