學習實現實體框架。我有一個通用的存儲庫。我想實現一個業務層。我知道如何爲此編碼,但我有點不確定在哪裏做到這一點。實體框架庫模式架構
- 我是否爲每個實體制作業務層類?
例如,數據庫供應商,代理商和聯繫人。我有一個通用的存儲庫。我應該創建一個ProviderManager,一個AgencyManager和一個ContactManager嗎?
- 除了業務層之外,我是否需要爲每個實體顯式存儲庫?
例如,我需要一個明確的ProviderRepository?
學習實現實體框架。我有一個通用的存儲庫。我想實現一個業務層。我知道如何爲此編碼,但我有點不確定在哪裏做到這一點。實體框架庫模式架構
例如,數據庫供應商,代理商和聯繫人。我有一個通用的存儲庫。我應該創建一個ProviderManager,一個AgencyManager和一個ContactManager嗎?
例如,我需要一個明確的ProviderRepository?
你可以使用NuGet包T4Scaffolding用於EF模型類容易產生庫。您可以按照以下給定的鏈接啓動新的類項目並實現此存儲庫,然後在業務類中引用它。此存儲庫包含每個模型類的基本CRUD操作。瞭解更多詳情http://thedatafarm.com/data-access/using-t4scaffolding-to-create-dbcontext-and-repository-from-domain-classes/
我是否爲每個實體制作業務層類?
不,這不是真的有必要。業務可以使用多個存儲庫實體來執行業務操作。例如CheckOutOrder類可能包括付款,運輸,庫存等類型倉庫操作。這是業務層,它應該不知道你的數據是如何由持久存儲來表示的。
解決你的第二個問題,Repository模式是你放在你的數據訪問層上的一個抽象層(例如像ADO.NET/EF/NHibernate的ORM) IMO,如果你確實想使用repository模式,記住它你正在引入一個額外的圖層。
你的庫層也能像:
IRespository<T>
RespositoryBase<T> : IRepository<T>
另外,如果你想保留它通用再沒關係了。但要確保你的泛型函數仍然在基類中。您希望在所有存儲庫中重新使用通用代碼。現在您可以爲每個實體創建一個專用類。
ProviderRepository : RepositoryBase<ProviderEntity>
您還可以爲每種類型的存儲庫介紹抽象以表示實體特定的方法。
ProviderRepository : RepositoryBase<ProviderEntity>
ProviderRepository : RepositoryBase<ProviderEntity>, IProviderRepository
實際實施可能會有所不同,但這是一個示範,只是爲了讓您的想法給你一個良好的開端。您將在互聯網上發現Repository模式的巨大實現。但我會建議先理解它,並保持簡單。
關注你必須實現的功能,而不是專注於你不瞭解的模式?我們無法回答您的問題,因爲我們不知道您必須達到什麼要求,以及您的業務要求有多複雜。 –
這就是我的問題。它是一個非常簡單的項目,所以我認爲這將是一個學習使用實體框架的好項目。所以我通過微軟的EF教程,只有一個存儲庫。所以我最初的想法是,我只是爲每個實體都有一個單獨的存儲庫,但看起來有點愚蠢。我需要的功能是基本的CRUD操作,再加上一些附加功能。 –
那麼,爲什麼不在沒有任何存儲庫的情況下使用純EF,並且在你去尋找其他複雜性之前先簡單地學習EF呢? [EF本身已經實現了存儲庫](http://stackoverflow.com/questions/5625746/generic-repository-with-ef-4-1-what-is-the-point/5626884#5626884)。我認爲EF的學習應該足夠用於單個項目。 –