我做了一个"普通"把我的模型放在那里,这样我就可以在我的其他项目中使用它们,这样我的所有项目都知道我使用的模型而不了解彼此,但当我尝试打开会话工厂并使用流畅的nhibernate映射这些模型时,它只会跳过我的映射。有没有什么办法可以映射这些模型,而不会在我的共同项目中添加对流利的nhibernate的引用?
答案 0 :(得分:0)
您可以告诉FH查找特定程序集中的类型。无论您在何处执行FH配置,都需要参考您的公共项目,但我不认为这是有问题的。这是自动持久性帮助程序的一个示例:
public class AutoPersistenceModel
{
public AutoPersistenceModel GetModel()
{
var model = AutoMap.AssemblyOf<Common.YourClassName>(new AutomappingConfiguration()) // add types-to-map
.Conventions.AddFromAssemblyOf<TableNameConvention>() // add generic conventions
.Conventions.AddFromAssemblyOf<AutoPersistenceModel>() // add specific conventions
.UseOverridesFromAssemblyOf<AutoPersistenceModel>(); // add mapping overrides
return model;
}
}
public class AutomappingConfiguration : DefaultAutomappingConfiguration
{
/// <summary>
/// defining which types should be auto-mapped...
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public override bool ShouldMap(System.Type type)
{
var interfaces = type.GetInterfaces();
return
interfaces.Any(
x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEntityWithTypedId<>));
}
/// <summary>
/// defining which properties should be auto-mapped...
/// </summary>
/// <param name="member"></param>
/// <returns></returns>
public override bool ShouldMap(Member member)
{
return base.ShouldMap(member) && member.CanWrite &&
!member.MemberInfo.IsDefined(typeof (NotMappedAttribute), false);
}
}
...
sessionFactory = Fluently.Configure()
.Database(sqlConfig)
.Mappings(m => m.AutoMappings.Add(new AutoPersistenceModel().GetModel()))
.CurrentSessionContext<T>()
.BuildSessionFactory();
答案 1 :(得分:0)
感谢您的回答,但我找到了一种更轻松的方式来做我想要的事情, 我从m.FluentMappings.AddFromAssemblyOf()更改了会话工厂映射配置 至 m.FluentMappings.AddFromAssemblyOf() 它又开始工作了