2012-02-17 65 views
1

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

例如,对于实体定义映射,我有一个实体:在OnModelCreating

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

它已经加入映射()在EF普遍使用。如果我在2个独立程序集中有2个函数,请调用AssemblyA.dll和AssemblyB.dll,它们由MEF框架动态加载。

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

EF是否支持我们这样做?或者你可以给我一个方向。

+0

不知道我是否明白_mapping_的含义。你可以包含你的'OnModelCreating()'代码吗? – 2012-02-17 09:49:38

回答

0

这不是很清楚你正在尝试做的,但:

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

无论如何,如果你正在使用MEF和模块化架构的每个实体应当是核心(不涉及任何特定的模块和共享如模块之间)或模块(未被任何其他模块或核心使用)。

+0

谢谢拉迪斯拉夫,你能给我更多关于项目3(你告诉使用DbCompileModel)吗?此外,有什么方法可以实现我的想法? – thanhauco 2012-02-17 17:24:30