我有一个项目,我的映射和实体存储在其他类库和NHibernate层中的另一个项目中。在我的测试项目中,我想通过流畅的配置添加这些映射...映射...通过装配而不是单独。在下面的代码中,您可以看到我只添加了一个实体.. 但是我想将其配置为扫描我的其他程序集。我相信我只是错过了这里显而易见的......任何指针都会非常感激......
[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();
}
答案 0 :(得分:1)
<强>自动映射强>
如果您想要过滤类型,可以使用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);
};
}