代码中的Nhibernate映射(如何入门)

时间:2011-09-16 13:20:06

标签: nhibernate mapping-by-code

我正在努力开始使用NH 3.2中的代码进行映射,然后我就失去了一点点。

我需要回到基本文档的指针,这样我才能理解我能找到的例子是什么意思, 例如......

public class CustomerMap : ClassMapping<Customer>  
{  
     public CustomerMap()  
     {  
         Lazy(false);  
         Id(x => x.ID, map => map.Generator(Generators.HighLow,  
                       gmap => gmap.Params(new {max_low = 100})));  
         Property(x => x.FirstName, map => map.NotNullable(true));  
         Property(x => x.LastName, map => map.NotNullable(true));  
         Property(x => x.Email, map =>  
                                    {  
                                        map.Unique(true);  
                                        map.Length(50);  
                                        map.NotNullable(true);  
                                    });  
     } 

现在,文档在哪里可以告诉我这里发生了什么。 ClassMapping中有一个Id方法,但我不知道它可以采用哪些可能的参数或者map.Generator类正在做什么。此外,什么是x =&gt; x.ID干嘛?根据我的理解,它应该说x的引用转到x.id,但是x遍布整个plcae!?!关于Property函数的文档(heack整个ClassMapping类)将有很多帮助。

我迷路了。

2 个答案:

答案 0 :(得分:1)

首先值得一提的是,这是FluentNhibernate,这个项目允许您使用上面使用的示例将nhibernate配置存储在代码中。网站上有相当多的文档。

那就是说,我会给你几个快速指示,让你开始:

ClassMapping中有一个Id方法,但我不知道它可以采用哪些可能的参数或者地图类正在做什么。

Id方法采用Expression<Func<T, object>>,它允许下面的代码获得表示您的id字段的表达式树。在简单的情况下你会得到它将采用表达式树并生成这样的身份映射(如果你使用xml配置这样做。这也是猜测,可能是错误的):

<id name="Id"><generator class="native" /></id>

您也可以使用复合ID,如下所示:

CompositeId()
    .KeyProperty(t => t.Cat)
    .KeyProperty(t => t.Color)
    .KeyProperty(t => t.Name);

此外,x =&gt;是什么? x.ID干嘛?根据我的理解,它应该说x的引用转到x.id,但是x遍布整个地方!?

我建议阅读表达式树以便更好地理解它们可以做什么,因此您可以看到如何使用lambda表达式来获取有关对象图的信息。 x只是lambda期望的对象的占位符,它由传递给ClassMap<T>的泛型参数键入。因此,xT,在您的情况下是Customer,可以由表达式树解析器检查。

我希望这有帮助!

答案 1 :(得分:1)

 "what is the x=> x.ID doing?"

该行说,“此类的Id字段映射到名为此类ID的属性”。它是一个lambda表达式,x是该lambda表达式的局部变量。

"From what I understand it should say that the reference to x goes to x.id, but x is used all over the plcae!?!"

我不确定'引用'是什么意思......这不是NHibernate的特定语法。这是NHibernate选择将其解释为映射的泛型和linq表达式的巧妙利用。

至于文档,流畅的东西非常类似于XML的东西。 XML内容的文档在http://www.nhforge.org/doc/nh/en/index.html