我有两张表,一张称为 QuestionText 另一张称为 State。当我将 SaveOrUpdate() 调用到 QuestionText 时,它保存得很好,但是当我为 State 调用 SaveOrUpdate() 时,我得到:必须在调用 save() 之前手动分配此类的 ID:Entities.State
每个类的映射都是相同的。
关于为什么 nHibernate 对一个表而不是另一个表的自动生成/身份指定的主键说这个的任何想法......当映射显然两者相同时?
这个工作正常:
[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;
}
}
}
更新1:
我删除了 State 表,并尝试插入数据。它给了我与上面相同的错误(设置唯一 ID)。然后我删除了 QuestionText 表并尝试插入,它给出了 - {"Invalid object name 'eoi.QuestionText'."}。那么这是否意味着 State 对象(表)存在两次?别的地方?或者也许在另一个模式下?我知道 State 是 SQLServer 中的一个关键字,所以我想知道这是否是问题的一部分。