我有兩個表,一個叫做QuestionText,另一個叫做State。當我將SaveOrUpdate()調用到QuestionText時,它可以很好地保存,但是當我調用SaveOrUpdate()時,我得到:此類的ids必須在調用save()之前手動分配:Entities.StateNhibernate映射 - 生成「本地」說ID必須手動分配
映射每班同樣。
關於爲什麼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:
我刪除了狀態表,並嘗試插入數據。它給了我與上面相同的錯誤(設置唯一ID)。然後,我刪除了QuestionText表並嘗試插入並給出了 - {「無效的對象名'eoi.QuestionText'。」}。那麼這是否意味着州對象(表)存在兩次?別的地方?或者可能在另一個模式下?我知道State是SQLServer中的一個關鍵字,所以我想知道這是否可能是問題的一部分。
你是否檢查過StateID列設置爲身份? –
是的,我確定它的身份設置爲true。我會放下並重新創建表格。也許這會解決它。 – EbbnFlow