如何修改其他程序集中已映射实体的映射?

时间:2012-02-17 09:27:54

标签: c# entity-framework ef-migrations

我想为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个新的映射类,它将根据其程序集动态运行以删除列(AssemblyA将忽略ColB,而AssemblyB忽略ColA)。我不想修改当前EF的代码,因为它已经在生产中。每个程序集的所有更改都应该是自己的。

EF支持我们这样做吗?或者你可以给我指点。

1 个答案:

答案 0 :(得分:0)

目前还不是很清楚你想做什么,但是:

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

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