我正在使用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):
class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Id(x => x.Id)
.GeneratedBy.Native();
Map(x => x.FirstName);
Map(x => x.LastName);
}
}
然后我有以下代码来配置 SessionFactory (使用Fluent NHibernate),创建一个新的Employee并将其保存到数据库中:
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();
}
}
我的问题如下:员工似乎没有保留在数据库中。我也不例外,Save返回的 id是正确的。一切似乎都很好,除了当我检查表中的数据时,没有员工......
使用 ShowSql 选项,这里是生成的 SQL:
NHibernate: INSERT INTO `Employee` (FirstName, LastName) VALUES (?, ?);
@p0 = 'Laurent' [Type: String (7)], @p1 = 'De Cant' [Type: String (7)]
NHibernate: select @@identity
这是 NHibernate 分析器给我的:
-- statement #1
begin transaction with isolation level: Unspecified
-- statement #2
INSERT INTO `Employee`
(FirstName,
LastName)
VALUES (?,
?)
-- statement #3
select @@identity
-- statement #4
commit transaction