微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Fluent NHibernate中自动映射属性

如何解决在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?