2014年10月13日 星期一

[鐵人30天]當ASP.NET MVC 遇見 Angular.js MVC 客戶管理系統(18) – Entity FrameWork 與 SP

* 本篇目標

建立SQL SP,並於Entity FrameWork加入

* 前言

接下來幾篇,會開始介紹報表開發

* Stored Procedure(預存程序)

早期開發上,多半習慣將DAL層放入MS SQL的Stored Procedure,但我遇過公司是將所有商業邏輯也寫在SP裡的,那維護上會非常的痛苦,彈性也非常的低,Entity Framework出來後將DataBase物件化,讓不會懂SQL的人也可以去做資料的處理,且如果今天資料庫切換了,也只要將Conncetion修改,所做的工不會太大。但實務上一個系統常常會有一些報表要製作,報表通常牽扯到非常多的資料表,這時候用EF來講效能會非常的差,我就會將這些"清單型邏輯",這些複雜Join邏輯寫成Stored Procedure。

* 建立SP

此範例很簡單,我們將兩個資料表建立起來(實務上可能很複雜)

USE [Northwind]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- sp_Customer_Orders
ALTER proc [dbo].[sp_Customer_Orders]

as   

DECLARE @errorMsg nvarchar(255)

begin
    SET NOCOUNT ON;

    --取得訂單所對應的客戶
    SELECT Orders.OrderID,Orders.OrderDate,Customers.CustomerID,Customers.ContactName
    FROM Orders inner join Customers on Orders.CustomerID = Customers.CustomerID

end

接著在實體模組加入

34ef9490ea4648fbb32362d4fa624765

加入剛剛建立的SP

118ac4d1b2604156bf3b067ced1c11c1

接著我們在BLL層建立一個OrderSevice直接使用,不須知道他的join邏輯

c3f8c31f27094a4b82f4464073dc6216

Entity Framework也幫我們產生好相對應的Class,相當方便

0cde442eb0484178b1c2e408c94eb3a1

而Web專案直接像Service要資料

0cde442eb0484178b1c2e408c94eb3a1

取得結果

de2e2deb6e9f4f159b16382acc75a11f

 

本系列程式原始碼請至我的Github下載  https://github.com/kyleap

** 如內容有誤請告知,將進行修改,謝謝 **

沒有留言:

張貼留言