Использование Entity Framework в модульном приложении
В настоящее время я работаю над MVC-проектом, который должен быть очень модульным. Например, я хочу иметь пользовательский модуль, модуль меню и модуль страницы.
Поскольку модули должны многократно использоваться в различных решениях Visual Studio, я создаю отдельные проекты для каждого модуля.
Для отображения базы данных я хотел бы использовать структуру сущностей. Я создал отдельный DbContext в каждом модуле-проекте. Каждый DbContext содержит объекты, связанные с модулем.
К сожалению, я не могу позволить EF создавать внешние ключи между сущностями в разных модулях /dbContexts.
Например: Базовый модуль содержит User-Entity. Модуль Page содержит Entity-Entity, у которого есть автор, который ссылается на User-сущность, определенную в базовом модуле dbContext.
Кто-нибудь знает, как я могу создавать внешние ключи для модулей /dbContexts?
1 ответ
Все ли ваши объекты находятся в одной базе данных? Я бы предложил разделить ваши сборки так:
Данные - проект, содержащий вашу модель Entity Framework и / или определения классов / сущностей (в зависимости от того, какой тип подхода 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();
}
}
Затем, обратитесь к вашим Service
а также Data
сборки в ваших модульных проектах.