是否可以在Fluent NHibernate中映射多个程序集中的实体?
我试过
AutoPersistenceModel
.MapEntitiesFromAssemblyOf<Class1>()
.AddEntityAssembly(assembly)
但它只从'assembly'加载实体,而不是从Class1的父程序集加载。
修改 我想到了。我不得不将Fluent NHibernate更新到版本1.0,你可以这样做:
AutoMap
.AssemblyOf<Class1>()
.AddEntityAssembly(typeof(UserEntity).Assembly)
答案 0 :(得分:4)
我明白了。我不得不将Fluent NHibernate更新到版本1.0,你可以这样做:
AutoMap
.AssemblyOf<Class1>()
.AddEntityAssembly(typeof(UserEntity).Assembly)
答案 1 :(得分:2)
我们多次使用NHibernate.Cfg.Configuration.AddAssembly()成功地映射多个程序集中的实体。下面是一段代码片段。如您所见,我们检查当前域中的所有程序集,并添加具有我们自己的名为“HibernatePersistenceAssembly”的自定义属性的任何程序集。我们创建这个属性只是为了让这个循环知道哪些程序集中有NHibernate实体,但你可以使用你想要的任何方案来决定添加哪些程序集,如果你愿意,只需简单地连接它们。
在AssemblyInfo.cs中,每个包含NHibernate实体的程序集:
[assembly: HibernatePersistenceAssembly()]
然后在我们的Hibernate Utilities类中:
public NHibernate.Cfg.Configuration ReloadConfiguration() { configuration = new NHibernate.Cfg.Configuration(); configuration.Configure(); ConfigureConnectionString(); ConfigureAssemblies(); return configuration; } private void ConfigureAssemblies() { foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (object attribute in assembly.GetCustomAttributes(true)) { if (attribute is HibernatePersistenceAssembly) configuration.AddAssembly(assembly); } } }
答案 2 :(得分:0)
您似乎只能拨打AddEntityAssembly
一次,请在此处阅读discussion。
我猜它会覆盖你上一行。
答案 3 :(得分:0)
你可以做类似于锐利的事情。
foreach (var assemblyName in mappingAssemblies)
{
Assembly assembly = Assembly.Load(assemblyName);
m.FluentMappings.AddFromAssembly(assembly );
}
至少对我有用。