Fluent NHibernate - 从多个程序集中映射实体

时间:2009-10-05 15:25:31

标签: fluent-nhibernate

是否可以在Fluent NHibernate中映射多个程序集中的实体?

我试过

AutoPersistenceModel
.MapEntitiesFromAssemblyOf<Class1>()
.AddEntityAssembly(assembly)

但它只从'assembly'加载实体,而不是从Class1的父程序集加载。

修改 我想到了。我不得不将Fluent NHibernate更新到版本1.0,你可以这样做:

AutoMap
.AssemblyOf<Class1>()
.AddEntityAssembly(typeof(UserEntity).Assembly)

4 个答案:

答案 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 );
}

至少对我有用。