如何解决在Fluent NHibernate中自动映射属性
| 我正在使用一个复杂的旧架构,并使用Fluent NHibernate对其进行映射。该模式很古怪,我已经放弃了自动映射。表之间的关系很奇怪而且很复杂,并且会涉及大量的异常。 问题是,简单的属性是完全正常的;表的“ 0”列映射到该实体的“ 0”属性,依此类推。但是由于我选择不使用全局自动映射,因此似乎没有一种方法可以避免在每个类上映射我的每个字符串和整数属性。我发现自己想要这样的东西class SomeMapping : ClassMap<SomeEntity>
{
public SomeMapping()
{
MapEverythingSimple();
}
}
在构建复杂的东西以反射性地发出lambda表达式(或类似的东西)之前,我只是缺少一个明显的功能吗?
解决方法
如何使用自动映射然后覆盖不符合约定的地方?
我认为这不会带来太大负担。您需要指定复杂的关系
无论如何都不符合惯例。
, 或者,您可以尝试使用NHibernate映射生成器从现有的数据库表中生成NHibernate映射文件和相应的域类:
http://nmg.codeplex.com/
, 使用Visual NHibernate的试用版可以快速生成您的实体类和Fluent映射,然后从那里获取它。免责声明:我为Slyce Software工作。
, 这不是我最终要做的,但是为了后代,这是不使用自动映射器就可以自动映射属性的方法:
public class PropMap<V> : ClassMap<V>
{
public PropMap()
{
foreach (var propInfo in typeof(V).GetProperties()
.Where(p => simpleTypes.Contains(p.PropertyType)))
{
ParameterExpression param = Expression.Parameter(typeof(V),\"x\");
Map(Expression.Lambda<Func<V,object>>(
Expression.Convert(Expression.MakeMemberAccess(param,propInfo),typeof(object)),param));
}
}
private static readonly Type[] simpleTypes = new[]
{
typeof (DateTime),typeof (String),typeof (int),typeof (long),typeof (Enum)
};
}
然后让map类从中继承。显然,它有一些严重的缺陷,我不赞成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。