суббота, 31 июля 2010 г.

Тестирование IoC контейнера Ninject 2.0

     Я недавно стал пользоваться Ninject 2.0 для создания IoC контейнеров. Это очень удобный фреймворк, однако ошибки при его конфигурации можно заметить только во время работы программы. Однако даже если IoC контейнер сконфигурирован не правильно, программа во многих случаях будет выполняться успешно. Было бы неплохо использовать модульные тесты для проверки IoC контейнера.

     Для тестирования своего ServiceModule я написал специальный класс-helper IoCTester, который проходит по классам всей сборки и пробует их инициализировать. При ошибке мой модульный тест падает.

Исходный код: NinjectTestingSample.zip

вторник, 20 июля 2010 г.

Отношение многие ко многим.

Рассмотрим два класса: Author и Book. Автор может хранить несколько книг. Книга тоже может иметь несколько авторов.

Сущности:

public class Author {
     public virtual int AuthorId { get; protected set; }
     public virtual IEnumerable Books { get; protected set; }
}

public class Book {
     public virtual int BookId { get; protected set; }
     public virtual IEnumerable Authors { get; protected set; }
}

Маппинг:

public sealed class AuthorMap : ClassMap<Author> {
     public AuthorMap() {
          Id(x => x.AuthorId);
          HasManyToMany(x => x.Books)
               .ChildKeyColumn("BookId")
               .ParentKeyColumn("AuthorId")
               .Table("Book_To_Author");
     }
}

public sealed class BookMap : ClassMap<Book> {
     public BookMap() {
          Id(x => x.BookId);
          HasManyToMany(x => x.Authors)
               .ChildKeyColumn("AuthorId")
               .ParentKeyColumn("BookId")
               .Table("Book_To_Author");
     }
}


Исходный код:
HasManyToManySample.zip


Fluent NHibernate для SQLite

понедельник, 19 июля 2010 г.

Отношение один к одному.

Для реализации отношения один к одному можно использовать метод References.

Сущности:

public class Author {
     public virtual int AuthorId { get; private set; }
     public virtual Book Book { get; private set; }
}

public class Book {
     public virtual int BookId { get; private set; }
}

Маппинг:

public sealed class AuthorMap : ClassMap<Author> {
     public AuthorMap() {
          Id(x => x.AuthorId);
          References(x => x.Book)
               .Column("BookId");
     }
}

public sealed class BookMap : ClassMap<Book> {
     public BookMap() {
          Id(x => x.BookId);
     }
}

Исходный код:
OneToOneSample.zip


Fluent NHibernate для SQLite

воскресенье, 18 июля 2010 г.

Отношение один ко многим.

Рассмотрим два класса: Author и Book. Автор может хранить несколько книг.

Сущности:

public class Author {
     public virtual int AuthorId { get; protected set; }
     public virtual IEnumerable Books { get; protected set; }
}

public class Book {
     public virtual int BookId { get; protected set; }
}

Маппинг:

public sealed class AuthorMap : ClassMap<Author> {
     public AuthorMap() {
          Id(x => x.AuthorId);
          HasMany(x => x.Books)
               .KeyColumn("AuthorId");
     }
}

public sealed class BookMap : ClassMap<Book> {
     public BookMap() {
          Id(x => x.BookId);
     }
}

Исходный код:
ManyToOneSample.zip


Fluent NHibernate для SQLite

среда, 14 июля 2010 г.

Fluent NHibernate для SQLite

Привет.
Недавно начал использовать Fluent NHibernate (http://fluentnhibernate.org) для быстрого создания маппингов. Сейчас хочу поделиться своим опытом и простыми примерами для SQLite. К сожалению Fluent NHibernate очень капризен и при любой ошибке приложение может упасть с ошибкой.

Отношение один ко многим.

Отношение один к одному.

Отношение многие ко многим.