我有一種我認爲會相當直接的情況,但證明是困難的。BaseDbContext與共享實體
我有一個單一的數據庫,目前有兩個不同的Web應用程序使用它。每個應用程序都有專門用於該應用程序的表,同時還有幾個共享的表,例如ApplicationUser表。
我想要做的是擁有一個basecontext,它將擁有所有共享實體,並具有從basecontext派生的應用程序特定上下文。對於應用程序上下文,許多共享實體將具有派生的特定於應用程序的實體,該實體具有其他導航屬性。
我會盡力來說明的清晰:在共享庫
public class BaseContext : DbContext
{
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
}
App1Context在應用1
public class App1Context : BaseContext
{
public new DbSet<App1User> ApplicationUsers { get; set; }
}
public class App1User: ApplicationUser
{
//Navigation property specific to App1
public virtual ICollection<SomeApp1Entity> SomeApp1Entity_Creator { get; set; }
}
App2Context在應用2
public class App2Context : BaseContext
{
public new DbSet<App2User> ApplicationUsers { get; set; }
}
public class App2User: ApplicationUser
{
//Navigation property specific to App2
public virtual ICollection<SomeApp2Entity> SomeApp2Entity_Creator { get; set; }
}
BaseCon
BaseContext文本具有ApplicationUser的dbset。
App1Context具有派生自ApplicationUser的App1User的dbset。
App2Context有一個用於App2User的dbset,它也來自ApplicationUser。
我需要特定於應用程序的用戶實體,因爲App1User可能具有不共享實體的導航屬性,並且僅適用於App1。 App2User也一樣。
我希望BaseContext的主要原因是,我可以擁有一個SharedService,它使用此上下文並擁有我的所有ApplicationUser方法用於CRUD。
我已經嘗試了幾種變化,所以如果有必要,我可以提供更多的信息,我只是不想讓這個問題太長,試圖解釋我嘗試過的一切。
我知道我希望爲BaseContext設置dbset,以便我可以擁有共享服務。在App1Context中構建模型時,我嘗試忽略ApplicationUser,因爲我認爲應該使用App1User,但這不起作用。當我這樣做時,它說沒有鍵集(因爲它忽略了具有鍵的基類,而不是在派生類中拾取它)。當我不理睬時,我會收到有關鑑別器列的錯誤。
我的第一個問題是,我是否完全用這種方法浪費了我的時間? Entity Framework 6.3甚至有可能嗎?
如果可能的話,我如何才能找到解決方案?
另外,讓我補充一點,我先使用代碼,但不擔心遷移。數據庫已經存在,並且數據庫的所有更改都在那裏進行,然後在C#代碼中相應地執行。
這是可能的:'public class BaseContext:DbContext {DbSet Users {get;組; }公共類App1Context:BaseContext {}和公共類App2Context:BaseContext {}'。我們通常會從用戶實體中指定所有的導航屬性嗎?通常,其他實體將具有用戶的導航屬性以設置像UpdatedBy,CreatedBy等關係。 –
Developer
如果您可以格式化您的問題,將會很好 – Eldho
泛型基類是否工作? 'BaseContext:DbContext where TUser:ApplicationUser'和'App1Context:BaseContext '。 –