Session.Save()不使用NHibernate.JetDriver保存

Session.Save()不使用NHibernate.JetDriver保存,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我正在使用NHibernate.JetDriver将我的实体持久化到Microsoft Access数据库中。 我有一个名为Employee的简单表,有3列: Id(自动生成的编号) 名字(文本) 姓氏(文本) 以下是相应的实体: class Employee { public virtual int Id { get; set; } public virtual string FirstName { get; set; } public virtual string

我正在使用NHibernate.JetDriver将我的实体持久化到Microsoft Access数据库中。 我有一个名为Employee的简单表,有3列:

  • Id(自动生成的编号)
  • 名字(文本)
  • 姓氏(文本)
以下是相应的实体:

class Employee
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}
以及映射(使用Fluent NHibernate):

以下是NHibernate profiler给我的信息:

-- statement #1
begin transaction with isolation level: Unspecified

-- statement #2
INSERT INTO `Employee`
            (FirstName,
             LastName)
VALUES      (?,
             ?)

-- statement #3
select @@identity

-- statement #4
commit transaction

如果下载的试用版,您应该查看会话是否打开、事务是否启动、发送的SQL以及会话是否引发错误。如果它抛出了一个错误,它可能会在某个地方被吞没。NHProf是独立于数据库的,所以它将和喷气机司机一起工作

请注意,您正在取回
自动编号
,因此我不确定,但我相信NHProf将帮助您了解情况。我想知道这是否是因为您的
birthdate
列是字符串,而您在实体上的属性是
dateTime
类型


通常,如果没有行被持久化,那么这表示实体
Employee
没有被添加到会话工厂,但是在您的情况下,它清楚地表明它是。。。请注意,如果您试图持久化未映射的实体,NHibernate不会抛出异常。

您可能正在查看错误的数据库。在生成过程中,数据库文件被复制到输出文件夹。如果您检查输出文件夹中的数据库,员工记录将显示。

谢谢您的回复,我将安装分析工具并查看发生了什么。实际上,生日属性有一个错误。为了避免混淆,我删除了该属性并相应地编辑了问题。此外,我还添加了生成的SQL。我编辑了原始帖子,添加了NHibernate Profiler中的语句详细信息。如果直接在access中运行该SQL,会发生什么?在meIt看来,后面的记号有点可疑。它在sql语句末尾提供了以下错误字符。然而,当我通过将原始值放入values子句来绕过参数时,请求工作得很好。实际上,Access似乎不支持多语句查询。有没有办法让NHibernate生成单语句查询?你是对的。我不相信我错过了这么一个基本点。。。非常感谢你!
var sessionFactory = Fluently.Configure()
    .Database(JetDriverConfiguration.Standard
        .ConnectionString(@"Provider=Microsoft.ACE.OLEDB.12.0;
            Data Source=.\Company.accdb")
        .ShowSql)
    .Mappings(m => m.FluentMappings
        .AddFromAssemblyOf<EmployeeMap>())
    .BuildSessionFactory();

var employee = new Employee
{
    FirstName = "Laurent",
    LastName = "De Cant"
};

using (var session = sessionFactory.OpenSession())
{
    using (var transaction = session.BeginTransaction())
    {
        var id = session.Save(employee);
        transaction.Commit();
    }
}
NHibernate: INSERT INTO `Employee` (FirstName, LastName) VALUES (?, ?);
@p0 = 'Laurent' [Type: String (7)], @p1 = 'De Cant' [Type: String (7)]
NHibernate: select @@identity
-- statement #1
begin transaction with isolation level: Unspecified

-- statement #2
INSERT INTO `Employee`
            (FirstName,
             LastName)
VALUES      (?,
             ?)

-- statement #3
select @@identity

-- statement #4
commit transaction