在模块化应用程序中使用Entity Framework

时间:2014-03-07 14:32:22

标签: entity-framework modular-design

我目前正在开发一个高度模块化的MVC项目。例如,我想拥有一个用户模块,一个菜单模块和一个页面模块。

由于模块需要在不同的Visual Studio解决方案中高度可重复使用,因此我为每个模块创建了单独的项目。

对于数据库映射,我想使用实体框架。我在每个模块项目中创建了一个单独的DbContext。每个DbContext包含与模块关联的实体。

不幸的是,我无法让EF在不同模块/ dbContexts中的实体之间创建外键。

例如: 核心模块包含用户实体 页面模块包含页面实体,页面实体具有链接到核心模块dbContext中定义的用户实体的作者。

有谁知道我如何跨模块/ dbContexts创建外键?

1 个答案:

答案 0 :(得分:2)

您的所有实体都在同一个数据库中吗?我建议将这些程序集分开:

数据 - 包含您的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();
    }
}

然后,在模块项目中引用ServiceData程序集。