2015-12-12 186 views
2

我最近通過Steve Smith和Julie Lerman觀看了Pluralsight上的Domain-Driven Design Fundamentals,這是一門很棒的課程,但是我有關於EF Code-First和DDD的問題,我得到了實際上了解大多數DDD,但我很難理解在DDD中使用EF Code-First。可以說我有兩個有界的上下文,並且我在每個有界的上下文中都有一個Customer實體來共享一個Id和Name。DDD和EF代碼優先遷移

namespace Accounts 
{ 
    public class Customer : Entity 
    { 
     public Guid Id { get; private set; } 
     public string Name { get; private set; } 
     public string AccountNo { get; private set; } 
    } 
} 

namespace Deliveries 
{ 
    public class Customer : Entity 
    { 
     public Guid Id { get; private set; } 
     public string Name { get; private set; } 
     public Address DeliveryAddress { get; private set; } 
    } 
} 

在每個界上下文我有一個的DbContext一個數據層,讓爲參數調用一個Accounts.AccountsDbContext和Deliveries.DeliveriesDbContext(起見各自具有IDbSet,使用它自己的約束上下文客戶實體定義如上)

我的問題和我很難理解的是,如何處理跨不同DbContext的代碼優先遷移。客戶需要引用相同的數據庫表,但只公開那些與他們所在的有界上下文相關的屬性。那麼EF如何通過遷移來處理?

回答

2

您需要一個上下文,其中定義了客戶的所有字段。此上下文將處理遷移。如果需要,您可以從有界的上下文中隱藏此上下文。您可以選擇使用

Database.SetInitializer<AccountsContext>(null); 

Database.SetInitializer<DelivieriesContext>(null); 

這些信息必須在朱莉的過程中禁用的限界上下文遷移,你想必已經錯過了它。

她的課程有一個很好的總結。你會發現它在 this MSDN magazine article

+0

感謝您的回答,我當然不記得在課程視頻中提到它,但是我確實在代碼示例中錯過了這一點。它看起來像朱莉和你的答案是建議使用「超級」上下文,其中包含您的數據庫的一切,並使用手動遷移這是很好,因爲我從來沒有使用自動遷移,但是,也許這只是我,但看起來似乎是矯枉過正有這個神話般的「第三」上下文能夠實現代碼優先,但如果這是唯一的選擇,那麼我認爲它是有道理的。 –

+0

是的,úber語境是唯一的方法,我不喜歡它特別多。 – Dabblernl

1

當你使用多個上下文共享表,你不能使用自動遷移(我從來沒有使用它們)。您可以生成所有遷移並在單個上下文中實現它(這是一項手動任務,但不是那麼難)。

此外,我認爲在某些情況下,您可以評估存儲庫模式(使用多個存儲庫和單個上下文)。