【问题标题】:Extending fluent nhibernate mappings in another assembly在另一个程序集中扩展流畅的休眠映射
【发布时间】:2010-05-03 21:13:17
【问题描述】:

我在我的 ASP.Net MVC 应用程序中使用 NHibernate。 我正在为我的应用程序编写一些扩展(插件)。我正在动态加载这些插件(来自不同的程序集)。 在我的基础应用程序中,我定义了许多实体和映射(用户、组等)

我需要在我的扩展中创建新实体,即我正在创建新闻模块,所以我需要创建新闻映射。 在数据库中,News 表有一个 User 表的外键。 有什么办法可以修改我的用户映射,所以它会有:

HasMany(x => x.News)
  .KeyColumn("UserId")
  .Inverse();

或者唯一的方法是更改​​我的用户类中的代码并重新编译项目?

我不是 NHibernate 高级用户,因此我们将不胜感激。 TIA。

【问题讨论】:

  • errr,你想动态添加一个属性给用户吗?
  • 是的,我想是这样的;)也许有完全不同的方法来实现这一点。
  • 映射被创建一次,在应用程序启动时,你知道你的实体的结构吗?
  • 好吧,我不知道我是否正确理解了您的问题:) 我正在 Application_Start 方法(全局 asax)中创建所有映射。我所有的扩展/插件都是在应用程序启动时加载的。
  • 我也在寻找这个的答案。 nhibernate 是否有可能在不触及“主”地图的情况下从另一个地图中扩展实体?

标签: c# asp.net-mvc nhibernate fluent-nhibernate


【解决方案1】:

Fluent NHibernate 可能会有所帮助

查看Fluent Mapping 上的部分,或者更好的是Auto Mapping

如果您不能使用默认值,可以为各个属性覆盖自动映射。此外,使用 fluent NHibernate,您可以为主键、外键等指定自己的默认值。

【讨论】:

  • +1。我知道自动映射,但是如何将 News 属性添加到 User 类?
【解决方案2】:

您可以自动映射多个程序集,例如

AutoMap.Assemblies(Assembly.GetExecutingAssembly(), 
                   typeof(MyType).Assembly)

将映射正在执行的程序集,以及包含“MyType”的程序集。

请注意,这是 FNH 中相对较新的功能(2010 年 2 月 19 日),因此请确保您拥有最新版本。

不确定这在动态加载情况下如何工作,但我认为与 NHibernate 本身相比,如何获取程序集列表(可能是通过反射)是一个更大的问题。

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    相关资源
    最近更新 更多