2つのテーブルがあります。1つはQuestionTextと呼ばれ、もう1つはStateと呼ばれます。質問テキストに対してSaveOrUpdate()を呼び出すと、問題なく保存されますが、Stateに対してSaveOrUpdate()を呼び出すと、次のようになります。save()を呼び出す前に、このクラスのIDを手動で割り当てる必要があります。Entities.State
マッピングは各クラスで同じです。
マッピングが明らかに両方とも同じである場合、nHibernateが1つのテーブルに対して自動生成された/ ID指定の主キーに対してこれを言っているのに、別のテーブルに対してこれを言っていない理由についてのアイデアはありますか?
これは正常に動作します:
[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:
Stateテーブルを削除し、データを挿入しようとしました。上記と同じエラーが発生しました(一意のIDを設定してください)。次に、QuestionTextテーブルを削除して挿入しようとすると、-{"無効なオブジェクト名'eoi.QuestionText'。"}が返されました。これは、Stateオブジェクト(テーブル)が2回存在することを意味しますか?何処か別の場所?または多分別のスキーマの下で?StateがSQLServerのキーワードであることを知っているので、これが問題の一部である可能性があるかどうか疑問に思っています。