如何修改其他程序集中已映射实体的映射
本文关键字:映射 集中 程序集 程序 实体 其他 何修改 修改 | 更新日期: 2023-09-27 18:24:52
我想为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()中添加了常用的映射。如果我在两个独立的程序集中有两个函数,请调用AssemblyA.dll和AssemblyB.dll,它们由MEF框架动态加载。
AssemblyA.dll只需要ColA,必须删除ColB,AssemblyB.dll反之亦然,所以我需要为这两个服务定义两个新的映射类,它将根据其程序集动态运行以删除列(AssemblyA将忽略ColB,而AssemblyB将忽略ColA)。我不想修改当前EF的代码,因为它已经在生产中了。每个程序集的所有更改都应在其自己的程序集中。
英孚支持我们这样做吗?或者你能给我一个方向吗。
不太清楚你想做什么,但:
- 每个EF上下文的每个表和实体只能映射一次
- 这意味着,如果加载AssemblyA的配置,则不能使用AssemblyB的配置
- 这也意味着您不能使用默认方式在
OnModelCreating
中构造EF映射,因为该方法在整个应用程序生命周期中通常只调用一次 - 您可以手动构造两个
DbModel
容器,将它们编译为DbCompiledModel
并将它们传递给DbContext
构造函数-这将允许您为AssemblyA和AssemblyB提供两种不同的映射配置,但永远不会在同一上下文实例中同时拥有这两种配置 - EF迁移很可能不起作用,因为它们期望每个数据库只有一个映射集
无论如何,如果您使用的是MEF和模块化架构,则每个实体都应该是核心(与任何特定模块无关,并在模块之间按原样共享)或模块(不被任何其他模块或核心使用)。