我正在努力开始使用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类)将有很多帮助。
我迷路了。
答案 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>
的泛型参数键入。因此,x
是T
,在您的情况下是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。