NHibernate - не - пустое свойство ссылаются на пустое или переходное значение

Используйте этот код, чтобы найти запись между двумя датами, используя $gte и $lt:

db.CollectionName.find({"whenCreated": {
    '$gte': ISODate("2018-03-06T13:10:40.294Z"),
    '$lt': ISODate("2018-05-06T13:10:40.294Z")
}});
24
задан brendanjerwin 20 February 2009 в 02:09
поделиться

4 ответа

Другая возможность состоит в том, что Вы сохраняете весь граф объектов, и что график является круговым, и объекты не могут быть пустыми. Вы не могли давать NHibernate правопорядок, в котором можно сделать вставки. (Это должно произвести лучшее сообщение об ошибке, но это производит этого).

, не видя остальную часть источника, трудно быть большего количества справки. Попытайтесь удалить объекты из отображений (и не сохранить их), пока Вы не можете выяснить то, что вызывает проблему.

18
ответ дан Alun Harford 28 November 2019 в 23:49
поделиться

Похоже, что исключение порождает в строке 25 из Вашего файла RepositoryBase.cs, по-видимому, когда Сохранение () называют на одном из Ваших временных объектов. Какой сохраняется?

кроме того, и это могло бы быть не связано, так как я незнаком с Быстрым синтаксисом, должны, дочерний объект (страховка в этом случае) имеет.Cascade. Все на нем? В стандартном синтаксисе XML-схемы только родительское отображение имеет каскад = "все" на наборе дочерних объектов.

0
ответ дан Stuart Childs 28 November 2019 в 23:49
поделиться

Я ' У меня недавно была эта проблема, и она связана с тем, как поддерживаются двунаправленные отношения NHibernate. У вас есть правильное сопоставление, и поэтому NHibernate без проблем выполнит вставку пациента. Затем NHibernate необходимо взять ключ у пациентов и передать его в страховку. Поскольку пациент еще не существует, ключей не существует, и он не может выполнить вторую вставку. Ключ состоит в том, чтобы установить связь с помощью кода до сохранения, примерно так:

patient = new Patient();
patient.Insurances.Add( new Insurance{ Patient = patient } );
repository.Save( patient);

Теперь мне было чуждо, что вы должны установить свойство Patient для элемента коллекции, но если вы проигнорируете постоянство все вместе, вы будете устанавливать это в коде независимо от вашей стратегии сохранения.

У вас есть правильное сопоставление, и поэтому NHibernate без проблем выполнит вставку пациента. Затем NHibernate необходимо взять ключ у пациентов и передать его в страховку. Поскольку пациент еще не существует, ключей не существует, и он не может выполнить вторую вставку. Ключ в том, чтобы установить связь с помощью кода до сохранения, примерно так:

patient = new Patient();
patient.Insurances.Add( new Insurance{ Patient = patient } );
repository.Save( patient);

Теперь мне было чуждо, что вы должны установить свойство Patient для элемента коллекции, но если вы проигнорируете постоянство все вместе, вы будете устанавливать это в коде независимо от вашей стратегии сохранения.

У вас есть правильное сопоставление, и поэтому NHibernate без проблем выполнит вставку пациента. Затем NHibernate необходимо взять ключ у пациентов и передать его в страховку. Поскольку пациент еще не существует, ключей не существует, и он не может выполнить вторую вставку. Ключ в том, чтобы установить связь с помощью кода до сохранения, примерно так:

patient = new Patient();
patient.Insurances.Add( new Insurance{ Patient = patient } );
repository.Save( patient);

Теперь мне было чуждо, что вы должны установить свойство Patient для элемента коллекции, но если вы проигнорируете постоянство все вместе, вы будете устанавливать это в коде независимо от вашей стратегии сохранения.

8
ответ дан 28 November 2019 в 23:49
поделиться

не уверен, помогает ли это, но это помогло мне.

<many-to-one name="Company" column="CompanyId" cascade="all" not-null="true"/>

cascade = "all" - вот что я упустил раньше

9
ответ дан 28 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: