powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate, attribute mapping OneToMany
1 сообщений из 1, страница 1 из 1
NHibernate, attribute mapping OneToMany
    #37137550
Slygric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Я не смог найти в интернете внятного для меня описания про маппинг атрибутами в NHibernate. Что ж, отчасти я смог реализовать маппинг самостоятельно и по тем материалам,что я нашёл.
Есть два entity-класса, связанных между собой.
Код: 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.
28.
29.
30.
31.
32.
[Class]
    [Serializable]
    public class Model
    {
        [Id(0, Column="Id", Type="int",Name = "Id")]
        [Generator(1, Class = "identity")]
        public virtual int Id { get; protected set; }

        [Property]
        public virtual string ModelName { get; set; }

        [Property]
        public virtual bool IsReference { get; set; }

        [ManyToOne(Class = "Database.Entity.Model", Column = "ReferenceModelId")]
        public virtual Model ReferenceModel { get; set; }

        [OneToMany(Class = "Database.Entity.RuleModelState", ClassType = typeof(Database.Entity.RuleModelState))]
        public virtual List<RuleModelState> RuleStates { get; set; }

        

        

        #region Конструкторы

        public Model()
        {
            RuleStates = new List<RuleModelState>();  // По совету джависта 
        }

        #endregion

Код: 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.
28.
29.
    [Class]
    [Serializable]
    public class RuleModelState
    {
        [Id(0, Column = "Id", Type = "int", Name = "Id")]
        [Generator(1, Class="identity")]
        public virtual int Id { get; set; }

        [ManyToOne(Class = "Database.Entity.Model", Column = "ModelId")]
        public virtual Model Model { get; set; }

        [ManyToOne(Class = "Database.Entity.CustomizationRule", Column = "RuleId")]
        public virtual CustomizationRule CustomizationRule { get; set; }

        [Property(Type = "int", Column = "EnabledState", Name = "EnabledState")]
        public virtual EnabledState EnabledState { get; set; }

        [Property(Type = "int", Column = "Recommendation", Name = "Recommendation")]
        public virtual EnabledState Recommendation { get; set; }

        [Property]
        public virtual bool? IsValid { get; set; }

        #region Конструкторы

        public RuleModelState()
        { }

        #endregion

Мапинги ManyToOne работают -- при извлечении объекта RuleModelState у него заполнены нужные свойства (Model и CustomizationRule). Перевод int в БД на enum в коде тоже работает (Recommendation).

Теперь сама проблема : при извлечении объекта Model:
Код: plaintext
1.
2.
3.
Model result;
//result = session.Get<Model>(modelId);
result = (Model) session.CreateCriteria<Model>().Add(Restrictions.Eq("id", modelId)).SetFetchMode("RuleStates",FetchMode.Join).UniqueResult();
Поле result.RuleStates остаётся пустым. То есть, result.RuleState.Count == 0 или же result.RuleState == null в случае, если из конструктора убрать строку инициализации коллекции.

Вопросы:
1. Можно ли при связи OneToMany пользоваться стандартными коллекциями (System.Collections.Generic.List<...>)?
2. Какие атрибуты должны быть над свойством public virtual List<RuleModelState> RuleStates { get; set; } ? Я пробовал дополнять [Key(0, Column = "ModelId")], работать не стало.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate, attribute mapping OneToMany
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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