nHibernate & sqlite mappings

2020-07-24 04:39发布

I'm having real problems with setting up nHibernate with sqlite.

Here is the hibernate.cfg.xml file:

<?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="dialect">NHibernate.Dialect.SQLite20Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
    <property name="connection.connection_string">Data Source=books.db;Version=3</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <property name="query.substitutions">true=1, false=0</property>

    <property name="show_sql">true</property>
    <property name="format_sql">true</property>


  </session-factory>
</hibernate-configuration>

and here is the (simplified) mapping file:

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly ="DataAccess" namespace="DataAccess.DOM">
  <class name="Book" table="book">
    <id name="id" type="integer" unsaved-value="null">
      <generator class="increment"/>
    </id>

    <property name="isbn" type="string" length="25"/>
    <property name="author" type="string" length="100"/>

  </class>
</hibernate-mapping>

The table:

create table book(
  id INTEGER primary key,
  author TEXT,
  isbn TEXT,
);

I get the error: "Could not compile the mapping document: DataAccess.DOM.Book.hbm.xml"

I'm developing in VS2008 on Vista 32bit.

I've added the System.Data.SQlite assembly and set to copy local.

Any suggestions?

3条回答
成全新的幸福
2楼-- · 2020-07-24 04:48

Have you embedded the hbm.xml file in the assembly?

Taken from https://www.hibernate.org/362.html :

NOTE: If you are using Visual Studio .NET to compile make sure that you set the Build Action of the User.hbm.xml file to Embedded Resource. The mapping file will now be a part of the Asssembly. The subtle detail's importance will be evident later.

查看更多
该账号已被封号
3楼-- · 2020-07-24 04:56

In your book mapping file, set the properties like this:

<property name="isbn" column="isbn"/>
<property name="author" column="author"/>

Also make sure that your values in the above name attributes are the same case as they are your class.

查看更多
走好不送
4楼-- · 2020-07-24 04:59

I fixed this ages ago, and now can't remember exactly what I did :o(

However, looking at the code: I notice this change to the mapping file, I changed the tag for the Id from integer to Int32 and the generator class from increment to native:

<id name="Id" type="Int32" unsaved-value="0">
  <generator class="native"/>
</id>
查看更多
登录 后发表回答