NHibernate使用SqlCe插入生成无效的表名

时间:2013-12-22 12:00:12

标签: c# sql nhibernate sql-server-ce

我正在尝试使用NHibernate进行一个相当简单的插入到SqlCe数据库中,但似乎NHibernate生成了错误的表名。它抛出GenericADOException并带有以下细节:

  

无法插入:   [WebLibrary.Models.Category#400a532d-f62e-4faf-978b-a29c00d4de46]   [SQL:INSERT INTO WebLibrary.Models_Categories(Title,Slug,DateCreated,   LastModified,CreatedBy,LastModifiedBy,ParentId,Id)VALUES(?,?,   ?,?,?,?,?,?)]

以下是映射:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping schema="WebLibrary.Models" assembly="WebLibrary" namespace="WebLibrary.Models" xmlns="urn:nhibernate-mapping-2.2">
  <class name="Category" table="Categories">
    <id name="Id" type="Guid">
      <column name="Id" not-null="true" />
      <generator class="guid.comb" />
    </id>
  ...
  </class>
</hibernate-mapping>

这是配置:

   var cfg = new Configuration();
   cfg.DataBaseIntegration(c =>
   {
      c.Dialect<MsSqlCe40Dialect>();
      c.ConnectionString =
          "Data Source=|DataDirectory|\\library.sdf;Persist Security Info=False;";
   })
   .AddAssembly(typeof(NHibernateConfiguration).Assembly);

正如您所看到的,NHibernate使用该类的完全限定名称作为表的名称。

我正在使用NHibernate 3.3.1.4000和SqlCe 4.0。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

您的地图包含schema属性。删除它。

添加模式将在表前添加模式名称..这对于默认模式中的表不是必需的。