Fluent NHibernate

    Интересующимся O/R маппингом, а, в частности, NHibernate, будет интересен этот проект.
    В первой версии NHibernate существовало две возможности описать O/R преобразование. С помощью атрибутов и в XML файле (более популярный). Наблюдались проблемы с поддержкой и тестированием. Fluent NHibernate позволяет описать преобразование вот таким вот способом:

    public CustomerMap : ClassMap<Customer>
    {
     public CustomerMap()
     {
      Id(x => x.ID);
      Map(x => x.Name);
      Map(x => x.Credit);
      HasMany<Product>(x => x.Products)
       .AsBag();
      Component<Address>(x => x.Address, m => 
      { 
        m.Map(x => x.AddressLine1); 
        m.Map(x => x.AddressLine2); 
        m.Map(x => x.CityName); 
        m.Map(x => x.CountryName); 
      });
    }


    Сравните с XML описанием:
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
      namespace="Eg" assembly="Eg">

      <class name="Customer" table="Customers">
        <id name="ID">
          <generator class="identity" />
        </id>

        <property name="Name" />
        <property name="Credit" />

        <bag name="Products" table="Products">
          <key column="CustomerID"/>
          <one-to-many class="Eg.Product, Eg"/>
        </bag>

        <component name="Address" class="Eg.Address, Eg">
          <property name="AddressLine1" />
          <property name="AddressLine2" />
          <property name="CityName" />
          <property name="CountryName" />
        </component>
      </class>
    </hibernate-mapping>


    И что самое главное, такой вот код может быть протестирован, примерно так:
    [Test]
    public void VerifyCustomerSaves()
    {
      new PersistenceSpecification<Customer>()
        .CheckProperty(x => x.Name, "James Gregory")
        .CheckProperty(x => x.Age, 22)
        .VerifyTheMappings();
    }



    Есть, конечно, и неприятные моменты. Проект не закончен и джае не имеет стабильного релиза. Но к проекту можно присоединиться.
    Исходный код проекта находится по адресу http://code.google.com/p/fluent-nhibernate/
    Поделиться публикацией

    Похожие публикации

    Комментарии 4

      0
      Интересно, надо будет посмотреть обязательно.
        +1
        Если можно, то хотелось бы чтобы Вы изложили по подробней.
        И на мой взгляд xml маппинг хоть и более громоздкий, но и более интуитивно понятный, Вам так не кажется? Хотя возможно просто надо немного попривыкнуть.
          +2
          Нет, мне так не кажется. Скорее это дело привычки. Однако у такого (Fluent) представления, как я написал, есть ряд преимуществ. Это и делает его таким привлекательным:)
            0
            Какие подробности Вас интересуют?

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.