Как сообщить NHibernate сопоставить отношение "один ко многим" со списком<T> а не с IList<T>?

StackOverflow https://stackoverflow.com/questions/1086333

  •  23-08-2019
  •  | 
  •  

Вопрос

Могу ли я как-то сказать NHibernate, чтобы он сопоставил мое отношение "один ко многим" со свойством типа List вместо интерфейса IList?

Я знаю, что NHibernate использует свою собственную реализацию IList для отложенной загрузки, но мне не нужна эта функция.Вместо этого мне нужен сериализуемый класс, чего я не могу достичь, используя интерфейс IList вместо конкретного класса List.

Это было полезно?

Решение

Простой ответ - нет, вы не можете указать NHibernate использовать List<T>.Это предыдущий вопрос обсуждается это более подробно.

В лучшая статья Я смог найти, что сериализация объектов NHibernate предназначена для пользователей WCF.

Другие советы

Если вам действительно нужно это сделать, ваш единственный реальный вариант - изменить свою стратегию сериализации.

Вы можете использовать атрибут DataContract в System.Runtime.Сериализация вместо стандартного атрибута сериализации.Это будет поддерживать сериализацию интерфейсов.

Если вам нужно использовать стандартную сериализацию, то вы могли бы использовать отдельное свойство для хранения значений, которые вы хотите сериализовать, и просто заполнить его при сериализации:

//NHibernate property
public virtual IList<Entity> Entities
{
    get;
    set;
}

//Serialized property
public List<Entity> SerializedEntities
{
    get;
    set;
}

[OnSerializing]
void DoStuff(StreamingContext context)
{
    SerializedEntities = // Whatever you want to serialize...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top