0

我已閱讀MVC5 with EF6 DB First tutorial。通過本教程,它將生成代碼(控制器和視圖)。如何使用EF6在MVC 5中實現業務邏輯

我已經建立3個項目在VS:

+ AdminWebSite 
+ PublicWebSite 
+ EntityFramework 

而且我有問題,我應該在哪裏實現業務邏輯,並共享將在多個網站(管理員&公共)?

商業邏輯可以包括:

  • 與數據庫邏輯(即多臺交易)
  • 邏輯與SharePoint信息
  • 邏輯與電子郵件服務器

編輯

錯字,應該是3個項目cts而不是3解決方案,但它應該是類似的情況下,其中AdminWebSitePublicWebSite已添加EntityFramework作爲參考。

EDIT 2

的MVC3之前,我將創建一個類項目,其中包括所有的業務邏輯,同時也repository類。因此,每個WebSiteWebServices都可以使用相同的業務邏輯(但我不確定是否是最佳實踐)。

但是,當使用EF6移動到MVC5時,存儲庫和工作單元似乎不見了。並且不希望爲每個表實現存儲庫,其中一些表僅用於沒有業務邏輯的直接CRUD。

我希望這可以澄清是Too broad

回答

0

有在這個一看: http://dombrovsky.github.io/EntityHooks/

它看起來就像是設計與EF6合作的框架。它應該允許您在發生某個事件(如插入或更新記錄時)時編寫自定義業務邏輯。

+0

謝謝,但鉤子是爲_Code First_設計的,但我使用的是'數據庫優先'......並且它掛鉤了數據庫操作,與業務邏輯無關 – Prisoner

+0

EntityHooks只是業務邏輯可能的一個例子實現。如果你看看Git Repo中的代碼,你可以看到代碼是如何圍繞事件發生的。您不必使用代碼,但可以使用相同的技術/模式來實現業務的自定義邏輯。藉助一些抽象,您可以將自定義掛鉤存儲在可能因客戶而異的外部裝配中。 –

0

您可以利用項目下的解決方案。

我通常有一個單獨的項目(類庫/ DLL)中的數據庫層,讓其他項目引用它。這樣,您只有ORM(實體框架)的一個副本,簡化了數據庫模型中的任何更改。我還創建了一個數據庫項目(如果是SQL Server),它保存包括表和存儲過程的實際模式定義。這是對模式進行更改並進行部署的好方法。

只要足夠重要的部分代碼可以重新使用,通常是將其設置爲類庫並讓客戶端項目引用它的好主意。

+0

你能解釋一下嗎?數據庫項目應該與實體框架相同,對嗎?我應該執行哪個項目的業務邏輯? – Prisoner

+0

數據庫項目不是實體框架項目。您可以使用Visual Studio新項目模板創建一種名爲SQL Server項目的新類型的項目。它存儲進入實際SQL服務器數據庫的內容。諸如表,存儲過程和其他SQL級別資源之類的東西。我發現使用此項目對SQL資源進行版本控制,比較模式(例如生產和本地)和應用遷移非常方便。 –

+0

業務邏輯可以在控制器層,實體框架模型項目中的模型層(在我的答案中提到)或SQL存儲過程中。根據我的經驗,在存儲過程中使用邏輯可以使業務邏輯更容易(如果邏輯不太長)更快(性能明智)。 –

0

一個解決方案包括Web項目,BLL項目,DAL項目,網絡項目包含發佈和管理

0

,我不會有一個項目叫的EntityFramework,我會建議你用一個項目名爲基礎設施替換此項目。這個基礎設施項目將包含依賴於外部來源的類,例如EmailSenders和DAL類,比如EntityFramework類以及其他您未來可能希望用其他外部服務替換的原因。

您的業務邏輯應該存儲在Core項目中。這個核心項目不會參考Web項目或基礎設施項目(但Web項目將參考基礎設施以及核心項目)。如果你在覈心項目中需要一個EmailSender,你可以引用一個類似於IEmailSender的接口,它也位於核心。

這是基本的結構,我建議:

  • AdminWebSite
  • PublicWebSite
  • 基礎設施
    • EF
    • 登錄
    • 消息
    • SharePoin牛逼
  • 核心
  • 測試(該項目包含所有的單元測試和集成測試)

我真的建議你使用依賴注入閱讀起來。當你理解DI時,核心和基礎架構的分離將是有意義的,並且你可以看到它們如何在沒有任何硬引用的情況下互相使用。

如果您不想使用UoW或存儲庫,我建議您將EF移至核心,但基礎架構項目對於其他外部服務仍然非常有效。