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

标签 entity-framework modular-design

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

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

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

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

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

有人知道如何跨模块/dbContext 创建外键吗?

最佳答案

您的所有实体都在同一个数据库中吗?我建议像这样分离你的程序集:

数据 - 包含 Entity Framework 模型和/或类/实体定义的项目(取决于您使用的 EF 方法类型)。

服务 - 包含操作数据的接口(interface)和类的项目。例如,对于您的 User 实体(和相关项目),您可能有以下内容:

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 程序集。

关于entity-framework - 在模块化应用程序中使用 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252886/

相关文章:

c# - "An entity object cannot be referenced by multiple instances of IEntityChangeTracker"

python - 在 python 中编写模块化代码

Angular 项目结构最佳实践

javascript - Webpack 在 JS 文件中抛出一个奇怪的语法错误

javascript - 如何使变量和依赖项在 Node 应用程序的所有模块中可用?

c# - 包括不使用 Entity Framework 查询

entity-framework - Entity Framework 4.1 - Refresh 不是 Context 的成员

mysql - 提供者未返回 ProviderManifestToken 字符串错误

c# - OData 是否允许用户使用 IQueryable 查询 SQL EF 数据库?

javascript - 模块化/对象化 JQuery