У меня есть две таблицы, одна называется QuestionText, другая называется State. Когда я вызываю SaveOrUpdate() в QuestionText, он сохраняет штраф, но когда я вызываю SaveOrUpdate() для состояния, я получаю: Иды для этого класса должны быть назначены вручную перед вызовом save(): Entities.StateNhibernate mapping - генерировать «native» говорит, что идентификаторы должны быть назначены вручную
Отображения являются то же для каждого класса.
Любые идеи о том, почему nHibernate говорит об этом для автогенерированного/Identity, указанного Первичного ключа для одной таблицы, но не другого ... когда сопоставления явно являются одинаковыми?
Это один работает отлично:
[Serializable()]
[Class(NameType = typeof(QuestionText), Table = "QuestionText", Schema = "eoi")]
public class QuestionText
{
#region Public Properties
[NHibernate.Mapping.Attributes.Generator(Class = "native")]
[NHibernate.Mapping.Attributes.Id(Name = "QuestionTextID")]
public virtual int? QuestionTextID { get; set; }
[NHibernate.Mapping.Attributes.Property]
public virtual string QuestionDescription { get; set; }
[NHibernate.Mapping.Attributes.Property]
public virtual string QuestionCategory { get; set; }
[NHibernate.Mapping.Attributes.Property]
public virtual string QuestionDisplayTitle { get; set; }
#endregion
}
это один не делает:
[Serializable()]
[Class(NameType = typeof(State), Table = "State", Schema = "eoi")]
public class State
{
#region Public Properties
[NHibernate.Mapping.Attributes.Generator(Class = "native")]
[NHibernate.Mapping.Attributes.Id(Name = "StateID")]
public virtual int? StateID { get; set; }
[NHibernate.Mapping.Attributes.Property]
public virtual string StateAbbreviation { get; set; }
[NHibernate.Mapping.Attributes.Property]
public virtual string StateName { get; set; }
#endregion //Public Properties
}//end of class
и мой метод сохранения:
internal T Save(T obj)
{
using (ISession dbSession = EOIDB.GetSession())
using (ITransaction transaction = dbSession.BeginTransaction())
{
try
{
dbSession.SaveOrUpdate(obj);
transaction.Commit();
return obj;
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
}
}
Update1:
Я сбросил таблицу состояний и попытался вставить данные. Это дало мне ту же ошибку, что и выше (установите уникальный идентификатор). Затем я опустил таблицу QuestionText и попытался вставить, и он дал - {«Недопустимое имя объекта« eoi.QuestionText ».»}. Значит ли это, что объект объекта (таблица) существует дважды? где-нибудь еще? или, может быть, под другой схемой? Я знаю, что это ключевое слово в SQLServer, поэтому мне интересно, может ли это быть частью проблемы.
Вы проверили, что столбец StateID задан как личность? –
Да, я убедился, что он имеет значение true. Я сниму и заново создаю таблицу. Возможно, это исправит. – EbbnFlow