4

私はちょうど nhibernate を学んでいて、最初のサンプルを作成しようとしています。

空のサービス ベースのデータベースを作成し、マッピングといくつかのコードを記述しました。

namespace lab
{
    public class Skill
    {
        public virtual int Id { get; protected set; }
        public virtual string Description { get; set; }
    }
}
<?xml version='1.0' encoding='utf-8'?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="lab" assembly="lab">

  <class name="Skill" table="Skill">
    <id name="Id">
      <generator class="native"/>
    </id>
    <property name="Description" />
  </class>

</hibernate-mapping>
<?xml version='1.0' encoding='utf-8'?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2">

   <session-factory>

      <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
      <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
      <property name="connection.connection_string">Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Dmitriy\Desktop\lab\lab\lab\DataBase.mdf;Integrated Security=True;User Instance=True</property>

       <mapping  file="C:\Users\Dmitriy\Desktop\lab\lab\lab\Skill.hbm.xml" />
   </session-factory>

</hibernate-configuration>
var configuration = new Configuration();            
configuration.Configure(@"C:\Users\Dmitriy\Desktop\lab\lab\lab\hibernate.cfg.xml");
var session = configuration.BuildSessionFactory().OpenSession();
var transaction = session.BeginTransaction();
var skill = new Skill {Description = "C#"};
session.Save(skill);
transaction.Commit();

これを実行すると、挿入できませんでしたというエラーが常に表示されます。

INSERT INTO Skill (Description) VALUES (?); 
select SCOPE_IDENTITY()

オブジェクト名「スキル」が無効です。

nhibernate 自体がテーブルを作成する必要があるため、テーブルを作成しませんでした。

なぜそれが機能しないのかを理解するのを手伝ってもらえますか?

4

2 に答える 2

0

このソリューションは機能しますが、別のテーブルからすべてのデータが消去されます。発生した例外のルートが見つかりました。表の「ID」列を確認してください。「Id」列をインクリメントする必要があります。テーブルの作成の下で、IDENTITY を次のような一意のフィールドに設定する必要があります。

CREATE TABLE dbo.aTable (ID_User INTEGER NOT NULL PRIMARY KEY IDENTITY(1,1), Name VARCHAR(30)) END
于 2015-05-14T06:59:11.990 に答える