Nhibernate Mapping в коде (как начать работу) - PullRequest
1 голос
/ 16 сентября 2011

Я пытаюсь начать с отображения по коду в 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 используется повсюду! Документация по функции Property (heack для всего класса ClassMapping) очень поможет.

Я потерян.

Ответы [ 2 ]

1 голос
/ 16 сентября 2011
 "what is the x=> x.ID doing?"

Эта строка говорит: «Поле Id для этого класса сопоставлено свойству с именем ID этого класса».Это лямбда-выражение, а x - локальная переменная для этого лямбда-выражения.

"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.Это умный эксплойт обобщений и выражений linq, которые NHibernate хочет интерпретировать как отображение.

Что касается документации, то беглый материал очень похож на XML.Документация по XML-материалам здесь http://www.nhforge.org/doc/nh/en/index.html.

1 голос
/ 16 сентября 2011

Прежде всего стоит упомянуть, что это FluentNhibernate , проект, который позволяет сохранять конфигурацию nhibernate в коде, используя пример, который вы использовали выше. На сайте довольно много документации.

Тем не менее, я дам вам несколько быстрых указателей, чтобы вы начали:

В ClassMapping есть метод Id, но я не знаю, какие возможные параметры он может принимать или что делает класс карты.

Метод Id принимает Expression<Func<T, object>>, что позволяет коду под ним получить дерево выражений, которое представляет ваше поле id. В простом случае, который у вас есть, он возьмет дерево выражений и сгенерирует отображение идентификаторов, как это (если вы делали это, используя конфигурацию xml. Это также предположение и может быть неверным):

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

Вы также можете использовать составные идентификаторы, например:

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

Более того, что делает x => x.ID? Из того, что я понимаю, следует сказать, что ссылка на x относится к x.id, но x используется повсеместно!?!

Я рекомендую прочитать деревья выражений, чтобы лучше понять, что они могут делать, чтобы вы могли увидеть, как лямбда-выражения можно использовать для получения информации о вашем графе объектов. x - это просто заполнитель для объекта, который ожидает лямбда, который набирается универсальным параметром, переданным в ClassMap<T>. Таким образом, x - это T, в вашем случае Customer, который может быть проверен синтаксическим анализатором дерева выражений.

Надеюсь, это поможет!

...