2010-05-03 72 views
2

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

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

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

还是做它在我的User类更改代码并重新编译项目的唯一途径?

我不是NHibernate的高级用户,所以任何帮助将不胜感激。 TIA。

+0

错误,你想动态地添加一个属性给用户? – 2010-05-03 21:19:13

+0

是的,就像我想的那样;)Maby有完全不同的方式来实现这一点。 – Jarek 2010-05-03 21:20:15

+0

映射在应用程序启动时创建一次,您知道该实体的结构吗? – 2010-05-04 07:56:53

回答

1

功能NHibernate可以帮助

检查节上Fluent Mapping,或者甚至更好,Auto Mapping

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

+0

+1。我知道automapping,但我怎么能添加新闻属性到用户类? – Jarek 2010-05-03 22:42:58

1

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

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

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

请注意,这是FNH中的一个相对较新的功能(2010年2月19日),因此请确保您有最近的构建。

不知道这将如何在动态加载情况下工作,但我认为这更像是一个问题,你将如何获得程序列表(通过反射,可能)比NHibernate本身。