1

我想为 EF 中的实体自定义映射

例如,我有一个实体:

public class User
{  
    public int UserId { get;set;}
    public string Firstname { get;set;}
    public string ColA {get; set;}
    public string ColB {get; set;}
}

它已经在常用的 EF 中的 OnModelCreating() 中添加了映射。如果我在 2 个单独的程序集中有 2 个函数,请调用 AssemblyA.dll 和 AssemblyB.dll,它们由 MEF 框架动态加载。

AssemblyA.dll 只需要 ColA 并且必须为 AssemblyB.dll 删除 ColB,反之亦然,因此我需要为这 2 个服务定义 2 个新映射类,它将根据其程序集动态运行以删除列(AssemblyA 将忽略 ColB,和 AssemblyB 忽略 ColA)。我不想修改当前 EF 的代码,因为它已经在生产中。每个程序集的所有更改都应在其自身中。

EF 支持我们这样做吗?或者你能给我一个方向。

4

1 回答 1

0

目前尚不清楚您要做什么,但是:

  • 每个 EF 上下文只能将每个表和实体映射一次
  • 这意味着如果您为 AssemblyA 加载配置,则不能使用 AssemblyB 的配置
  • 这也意味着您不能使用默认方式来构建 EF 映射,OnModelCreating因为该方法通常在整个应用程序生命周期内只调用一次。
  • 您可以手动构造两个DbModel实例,将它们编译DbCompiledModel并传递给DbContext构造函数 - 这应该允许您为 AssemblyA 和 AssemblyB 提供两种不同的映射配置,但您永远不会将它们都放在同一个上下文实例中。
  • EF 迁移很可能不起作用,因为它们期望每个数据库有一个映射集

无论如何,如果您使用 MEF 和模块化架构,每个实体都应该是核心(不与任何特定模块相关并且在模块之间按原样共享)或模块(不被任何其他模块或核心使用)。

于 2012-02-17T10:29:16.510 回答