1

我正在尝试开始使用 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=> x.ID 在做什么?据我了解,它应该说对 x 的引用指向 x.id,但 x 在整个 plcae 中都使用!?!关于 Property 函数的文档(对整个 ClassMapping 类有帮助)会有很大帮助。

我迷路了。

4

2 回答 2

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

于 2011-09-16T13:43:53.910 回答
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=> x.ID 在做什么?据我了解,应该说对 x 的引用指向 x.id,但是 x 被到处使用!?!

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

我希望这有帮助!

于 2011-09-16T13:37:55.827 回答