2014-03-07 56 views
1

我目前正在開發一個應該高度模塊化的MVC項目。例如,我想要一個用戶模塊,一個菜單模塊和一個頁面模塊。在模塊化應用程序中使用實體框架

因爲這些模塊需要在不同的visual studio解決方案中高度重用,所以我爲每個模塊創建單獨的項目。

對於數據庫映射,我想利用實體框架。我在每個模塊項目中都創建了一個單獨的DbContext。每個DbContext都包含與模塊關聯的實體。

不幸的是,我不能讓EF在不同模塊/ dbContexts中的實體之間創建外鍵。

例如: 核心模塊包含用戶實體 頁面模塊包含頁面實體,該頁面實體的作者鏈接到在覈心模塊dbContext中定義的用戶實體。

有沒有人有一個想法,我可以跨模塊/ dbContexts創建外鍵?

回答

1

所有的實體都在同一個數據庫中嗎?我建議你這樣分開你的程序集:

數據 - 包含你的實體框架模型和/或類/實體定義(取決於你使用哪種類型的EF方法)的項目。

服務 - 包含操作數據的接口和類的項目。例如,您的用戶實體(以及相關項目),你可能有這樣的:

public interface IUser : IDisposable 
{ 
    Data.User Get(int userId); 
    IQueryable<Data.User> GetAll(); 
    //other method definitions for User entity CRUD 
} 

然後,您實現:

public class User : IUser 
{ 
    private readonly DataEntities _dataContext = new DataEntities(); //this is from your EF Data assembly 

    public Data.User Get(int userId) 
    { 
     return _dataContext.Users.FirstOrDefault(u => u.UserId == userId); 
    } 

    public IQueryable<Data.User> GetAll() 
    { 
     return _dataContext.Users; 
    } 

    //other method implementations 

    public void Dispose() 
    { 
     _dataContext.Dispose(); 
    } 
} 

然後,參考既您ServiceData組件在你的模塊項目。

+0

感謝您的回覆,您的解決方案肯定會奏效。但不幸的是不在我的情況。我希望能夠在不改變任何其他內容(您的數據層)的情況下在模塊中工作。我應該只能使用其他模塊的東西。 – mhtsbt

+0

@Matthias - 那麼恐怕我不明白你對'Module'的定義是什麼,以及爲什麼你的模塊不能訪問完整的服務層,只能使用他們特別需要的存儲庫。 –

相關問題