powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / С чего начать изучение NHibernate?
2 сообщений из 2, страница 1 из 1
С чего начать изучение NHibernate?
    #36476364
SADT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер! Начал изучение Nhibernate. Создал два класса: Parent и Child (родитель и его потомки)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class Parent
    {
        public virtual Guid id { get; set;}
        public virtual String Name {get; set;}
        public virtual IList<Child> Children {get; set;}
       
        public Parent()
        {
            Children = new List<Child>();
        }
    }

public class Child
    {
        public virtual Guid Id {get; set;}
        public virtual Parent Parent { get; set; }
        public virtual String Value { get; set; }
    }
С использованием FluentNHibernate задал отображение классов на соответствующие таблицы в БД:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class ParentMapping : ClassMap<Parent>
    {
        public ParentMapping()
        {
            Table("Parents");
            Id(x => x.id).GeneratedBy.Guid();
            Map(x => x.Name).CustomSqlType("varchar(256)").Column("Name");
           
            HasMany(x => x.Children)
                  .KeyColumn("ParentId")
                  .Inverse()
                  .Cascade.AllDeleteOrphan();
        }
    }


public class ChildMap : ClassMap<Child>
    {
        public ChildMap()
        {
            Table("Children");
            Id(x => x.Id).Column("Id").GeneratedBy.Guid();
            Map(x => x.Value).Column("Value").CustomSqlType("nvarchar(256)");

            References(x => x.Theme, "ParentId");
        }
    }
Вопросы такие:
1) Почему сохранять нужно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ITransaction tx = session.BeginTransaction(IsolationLevel.RepeatableRead);
                for (int i = 0; i < 10000; i++)
                {
                    Parent parent = new Parent();
                    parent.Name = "Главный " + (i + 1).ToString();

                    Child ch = new Child();
                    ch.Value = "Подчиненный " + (i + 1).ToString();
                    ch.Parent = parent;
                    parent.Children.Add(ch);

                    session.Save(parent);
                }
                tx.Commit();
Обращаю внимание на часть кода (работает):
Код: plaintext
1.
2.
3.
4.
Child ch = new Child();
ch.Value = "Подчиненный " + (i + 1).ToString();
ch.Parent = parent;
parent.Children.Add(ch);
В отличие от:
Код: plaintext
1.
2.
3.
4.
Child ch = new Child();
ch.Value = "Подчиненный " + (i + 1).ToString();
//ch.Parent = parent;
parent.Children.Add(ch);
или:
Код: plaintext
1.
2.
3.
4.
Child ch = new Child();
ch.Value = "Подчиненный " + (i + 1).ToString();
ch.Parent = parent;
//parent.Children.Add(ch);
В последних двух случаях связь не создается (почему-то хибер допускает null-значения в этих полях и просто заполняет таблицы). Как задать запрет на null значения в поле? Почему нужно фактически и в главном и подчиненном классе задавать ссылки друг на друга? Это всегда так нужно делать?
2) Насколько приемлемо в Nhibernate использование составных ключей? Я, судя по документации, понял, что не рекомендуется. Я не прав?
3) СтОит ли использовать FluentNHibernate для маппинга или лучше xml-файлы?
4) Если реальное приложение будет использовать сложные классы (большая вложенность: у класса Child тоже будет внутри какой-то список и т.д.), то достаточно ли будет вызывать метод сессии Save(корневой_объект), чтобы сохранить все включенные объекты с подобъектами?
5) Как быстро изучить технологию: сначала попробовать в простых тестовых приложениях, а потом уже решать сложные вещи в реальном проекте? Сколько в среднем нужно времени на изучение, чтобы приступить к чему-то более сложному, чем 3-5 табличек на базу?
...
Рейтинг: 0 / 0
С чего начать изучение NHibernate?
    #36477003
SADT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С ограничением not null разобрался, делаем так:
Код: plaintext
1.
Map(x => x.Name).CustomSqlType("varchar(256)").Column("Name").Not.Nullable();
Остальные вопросы все еще актуальны.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / С чего начать изучение NHibernate?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]