У меня есть ситуация, которая, по моему мнению, была бы довольно простой, но мне сложно.BaseDbContext с общими объектами
У меня есть одна база данных, в которой в настоящее время используется два разных веб-приложения. Каждое приложение имеет таблицы, которые используются специально для этого приложения, в то время как есть также несколько разделяемых таблиц, таких как таблица ApplicationUser.
То, что я пытаюсь сделать, это иметь базовый текст, который будет иметь все общие сущности и иметь специфические для приложения контексты, которые основаны на basecontext. Для контекстов приложения многие из общих объектов затем будут иметь производную специфическую для приложения сущность, которая обладает дополнительными свойствами навигации.
Я попытаюсь проиллюстрировать для ясности:
BaseContext в общей библиотеке
public class BaseContext : DbContext
{
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
}
App1Context в App1
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 в App2
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 текст имеет dbset для ApplicationUser.
App1Context имеет dbset для App1User, который является производным от ApplicationUser.
App2Context имеет dbset для App2User, который также является производным от ApplicationUser.
Мне нужны конкретные пользовательские объекты приложения, поскольку App1User может иметь свойство навигации для сущности, которая не является общей, и применяется только к App1. То же самое касается App2User.
Основная причина, по которой я хочу использовать BaseContext, заключается в том, что у меня есть SharedService, который использует этот контекст и имеет все мои методы ApplicationUser для CRUD.
Я пробовал несколько вариантов, поэтому при необходимости могу предоставить дополнительную информацию, я просто не хочу слишком долго задавать этот вопрос, пытаясь объяснить все, что я пробовал.
Я знаю, что я хочу dbset для BaseContext, чтобы у меня была общая служба. При создании модели в App1Context я попытался игнорировать ApplicationUser, так как я думал бы, что App1User будет использоваться вместо этого, но это не сработает. Когда я это делаю, он говорит, что нет набора ключей (потому что он игнорирует базовый класс, который имеет ключ, а не выбирает его в производном классе). Когда я не игнорирую, я получаю сообщение об столбце дискриминатора.
Мой первый вопрос: я полностью трачу свое время на этот подход? Возможно ли это с помощью Entity Framework 6.3?
Если возможно, как я могу пойти по-другому, чтобы найти решение?
Кроме того, позвольте мне добавить, что сначала использую код, но не беспокоюсь о миграции. База данных уже существует, и все изменения в базе данных сделаны там, а затем реализованы соответственно в коде C#.
Возможно ли это: 'public class BaseContext: DbContext {DbSet Users {get; задавать; } открытый класс App1Context: BaseContext {} и открытый класс App2Context: BaseContext {} '. Как правило, мы указываем все навигационные свойства из объекта User? Обычно другие объекты будут иметь навигационное свойство пользователя для установления отношений, таких как updatedBy, CreatedBy и т. Д. –
Developer
Это здорово, если вы сможете отформатировать вопрос – Eldho
Будет ли работать базовый класс? 'BaseContext: DbContext, где TUser: ApplicationUser' и' App1Context: BaseContext '. –