Как сообщить NHibernate сопоставить отношение "один ко многим" со списком<T> а не с IList<T>?
-
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...
}