Использование 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 сборки в ваших модульных проектах.

Другие вопросы по тегам