我正在使用ASP.NET MVC和SQL Server 2012製作一個Intranet網站。我正在使用洋蔥體系結構進行存儲庫和架構設計。我的問題是,我所在的公司已經有幾個服務器數據庫,其中表格之間沒有任何關係。相反,有表格來映射這些關係。例如,一個表User和一個Document Document有一個表User_joint_Document來創建一個關係,包含兩個ID(IDDocument和IDUser)。現在,當我寫我的通用倉庫:實體框架和存儲庫模式概念上的困難
class Repository<T> : IRepository<T> where T : class
問題是通用類型T是沒有意義的,並使用EF查詢,這是正常的,我不能影響我的模型值,什麼將是巨大的。將有一個父類BaseEntity來爲每個表定義的ID,那麼我可以這樣寫:
class Repository<T> : IRepository<T> where T : BaseEntity
和我所有的錶款會從BaseEntity繼承。但這也意味着以關係方式重寫整個數據庫並手動映射每個數據庫POCO(如果我錯了,請糾正我),並且我沒有技能來做到這一點(不同服務器數據庫中有超過300個表而且我沒有適當的知識和經驗來做這種手術)。
有沒有辦法讓我的原始數據庫結構,仍然寫一個通用儲存庫?如何去做這件事?
編輯澄清我的問題,因爲@saeb部分回答我的問題。我可以有一個通用的回購沒有我的數據庫POCO父級?或者我需要它以便只有一個存儲庫來統治它們?例如:
class Repository<T>:IRepository<T> where T : class
{
private readonly ApplicationContext context;
private DbSet<T> entities;
public Repository(PrincipalServerContext context)
{
this.context = context;
entities = context.Set<T>();
}
public T Get(long id)
{
return entities.SingleOrDefault(s => s.IDUser == id);
//This does not work, IDUser isn't recognized
}
感謝您的幫助!
你給Users'的'和'Documents'在數據庫中正確的實例的更清潔的方式。一個用戶可以有許多文檔,所以你需要一個'User_joint_Document'聯結表。這正是應該如何構建關係數據庫的結構。 – melkisadek
但是,如果您使用的是洋蔥體系結構,則會自動爲您創建存儲庫,您只需在DataOnion中註冊它們即可。 –
@melkisadek Bah!這就是我在DB上工作的糟糕之處。我會認爲你會在兩張桌子之間有類似1-1的關係或者類似的東西?也許那個rel'ship是一個真正的桌子?真的不是我強大的一面。如果我用ID創建父類,那麼關係表會變成什麼?由於它有IDDocument和IDUser,但現在我只能從父類 –