zoukankan      html  css  js  c++  java
  • NHibernate 3.2: (part 2) mapping by code

    In the first post about the new mapping-by-code feature you saw only the very first presentation.

    I’ll will try to write more posts about this new feature and all its secrets even if you can learn more using ConfORM.

    As in ConfORM even the NHibernate’s mapping-by-code is smarter than XML mapping and may help you in many cases. Well… it is not so smart as ConfORM but smart enough to prevent some common errors.

    It’s beginner proof

    Let me show you a simple case:

    private class Person
    {
        public int Id { getset; }
        public ICollection<Address> Addresses { getset; }
    }

    private class Address
    {
        public Person Owner { getset; }
        public string Street { getset; }
        public Number Number { getset; }
    }

    private class Number
    {
        public Address OwnerAddress { getset; }
        public int Block { getset; }
    }

    An entity with a collection of components which has a nested component. The beginner may intent this mapping:

    mapper.Class<Person>(cm =>
    {
        cm.Id(x => x.Id);
        cm.Bag(x => x.Addresses, cp => { }, cr => cr.Component(ce =>
        {
            ce.ManyToOne(x => x.Owner);
            ce.Property(x => x.Street);
            ce.Component(x => x.Number, y =>
            {
                y.Component(x => x.OwnerAddress, map => { });
                y.Property(x => x.Block);
            });
        }));
    });

    hmmmm… a cyclic mapping of the nested component on OwnerAdress property ? Not for sure!! NHibernate knows how create the correct mapping Winking smile.

    It’s even conformist

    In these years I saw people writing mappings by-code but class-by-class as in XML… a very conformist attitude. Well… if you feel conformist don’t worry NHibernate 3.2 can be conformist too.

    public class MyClass
    {
        public virtual int Id { getset; }
        public virtual string Something { getset; }
    }

    public class MyClassMapClassMapping<MyClass>
    {
        public MyClassMap()
        {
            Id(x => x.Id, map =>
            {
                map.Column("MyClassId");
                map.Generator(Generators.HighLow, gmap => gmap.Params(new { max_low = 100 }));
            });
            Property(x => x.Something, map => map.Length(150));
        }
    }

    Then you can add it to the ModelMapper in this way:

    mapper.AddMappings(typeof(AnyMappingClass).Assembly.GetTypes());

    NHibernate 3.2 too sexy by far!!!

  • 相关阅读:
    使用.NET中的XML注释(二) -- 创建帮助文档入门篇
    使用.NET中的XML注释(一) -- XML注释标签讲解
    C# 代码注释和Config文件中,特殊符号的书写方法。
    C# 代码注释规范文档
    智能语音录制程序——窃听神器(源码放送!)
    基于 Winform + DotNetBar 写的股市行情助手
    C#自动弹出窗口并定时自动关闭
    C#关闭子窗口而不释放子窗口对象的问题解决
    C#中将dateTimePicker初始值设置为空
    c#多线程实现定时执行代码与lock锁操作
  • 原文地址:https://www.cnblogs.com/sunjie9606/p/2169729.html
Copyright © 2011-2022 走看看