NHibernate Fluent 添加外部程序集映射

NHibernate Fluent Add external Assembly mappings

我有一个项目,我的映射和实体存储在另一个项目的其他 class 库和 NHibernate 层中。在我的测试项目中,我想通过流利配置添加这些映射...映射...通过 assebly 而不是单独添加。在我下面的代码中,您可以看到我只添加了一个实体。但我想将其配置为扫描我的其他程序集。我确定我只是错过了这里显而易见的东西。任何指针将不胜感激......

 [Test]
    public void Can_generate_schemaFluently()
    {
        var cfg = new Configuration();  
        cfg.Configure();

        Configuration configuration = null;
        ISessionFactory SessionFactory = null;
        ISession session = null;

        SessionFactory = Fluently.Configure(cfg)
            *** WOULD LIKE TO ADD MY ASSEBLIES and autoscan for objects instead ***
          .Mappings(m => m.FluentMappings
                        .Add(typeof(StudentEOMap))
                  )
           .ExposeConfiguration(x => configuration = x)
            .BuildSessionFactory();

        session = SessionFactory.OpenSession();

        object id;
        using (var tx = session.BeginTransaction())
        {
            var result = session.Get<StudentEO>(1541057);
            tx.Commit();
            Assert.AreEqual(result.StudId, 1541057);
        }
        session.Close();

    }

自动映射

如果要过滤类型,可以使用 IAutomappingConfiguration 并从 DefaultAutomappingConfiguration 派生,如下所示:

public class StandardConfiguration : DefaultAutomappingConfiguration
{
    public override bool ShouldMap(Type type)
    {
        // Entity is the base type of all entities
        return typeof(Entity).IsAssignableFrom(type);
    }
}

如果不需要过滤,也可以使用DefaultAutomappingConfiguration。但我的进一步示例使用 StandardConfiguration.

像这样更改您的配置,以将您的类型填充到 FluentNHibernate:

SessionFactory = Fluently.Configure(cfg)
    .Mappings(m => MapMyTypes(m))
    .ExposeConfiguration(x => configuration = x)
    .BuildSessionFactory();

MapMyTypes 方法应该如下所示:

private void MapMyTypes(MappingConfiguration m)
{
    m.AutoMappings.Add(AutoMap.Assemblies(new StandardConfiguration(), 
        Assembly.GetAssembly(typeof(Entity)), 
        Assembly.GetAssembly(typeof(OtherAssemblyEntity)))
    );
}

您可以添加多个程序集,所有程序集都通过 StandardConfiguration 过滤。

编辑

FluentMappings

看来我误读了你的问题。要添加映射,您可以使用类似的方法来实现,但没有 IAutomappingConfiguration。 只需将 MapMyTypes 方法更改为:

private void MapMyTypes(MappingConfiguration m)
{
    m.FluentMappings.AddFromAssembly(Assembly.GetAssembly(typeof(EntityMap)));
}

合并

您还可以像这样组合 FluentMapping 和 AutoMapping:

private Action<MappingConfiguration> MapMyTypes()
{
    return m =>
    {
        MapFluent(m);
        MapAuto(m);
    };
}