NHibernate没有保存实体

时间:2015-10-26 17:30:34

标签: c# nhibernate fluent-nhibernate

我有一个项目,我将数据从数据库移动到另一个。我有几张桌子在工作,但目前的桌子不是。当调用Iterator时似乎没有发生任何事情(没有从NHibernate发送插入记录)。未保存的实体是以下代码中的Session.Save(entity)实体。我包含了与另一个正常工作的实体相关的其他代码(大约十几个)。数据从Access数据库传输到MSSQL数据库。

复制对象并执行会话保存的代码。在Configuration实体上调用save时,不会插入任何内容。

Configuration

映射public void Save(Entities.Access.CompTool o) { var n = new CompTool(); n.Name = o.Name; n.Description = o.Description; n.DefaultLocation = o.DefaultLocation; n.DateModified = o.DateModified; n.OldId = o.Id; GetSession().Save(n); } public void Save(Entities.Access.Configuration o) { var n = new Configuration(); n.Name = o.Name; n.Description = o.Description; n.Value = o.Value; GetSession().Save(n); }

Configuration

映射using TestProg.DatabaseConverter.Entities.Sql; using FluentNHibernate.Mapping; namespace TestProg.DatabaseConverter.Mappings.Sql { public class ConfigurationMap : ClassMap<Configuration> { public ConfigurationMap() { Table("Configuration"); Id(x => x.Name).GeneratedBy.Assigned(); Map(x => x.Value); Map(x => x.Description).Column("Desription"); } } }

CompTool

using TestProg.DatabaseConverter.Entities.Sql; using FluentNHibernate.Mapping; namespace TestProg.DatabaseConverter.Mappings.Sql { public class CompToolMap: ClassMap<CompTool> { public CompToolMap() { Table("CompTools"); Id(x => x.Id).Column("ID"); Map(x => x.Name); Map(x => x.Description); Map(x => x.DefaultLocation); Map(x => x.DateModified); Map(x => x.OldId); } } } 实体

Configuration

创建using System; namespace TestProg.DatabaseConverter.Entities.Sql { public class Configuration { public virtual string Name { get; set; } public virtual string Value { get; set; } public virtual string Description { get; set; } } } 表的代码:

Configuration

1 个答案:

答案 0 :(得分:4)

session.Save(...)并不代表SQL INSERT

NHibernate会话的实例表示上下文/工作单元,它(甚至隐藏)数据库操作。

DB WRITE操作分批完成,如果需要或我们明确要求。以及如何通过调用

强制WRITE操作的方式
session.Flush();

检查文档的这些部分(所有这些部分都很有用,但这些部分涵盖了会话及其Flush模式)

9.6. Flush

Compile NetBeans project from command line by using Ant

  

ISession将不时执行将ADO.NET连接状态与内存中保存的对象状态同步所需的SQL语句。

     
      
  • 来自Find()Enumerable()
  • 的某些调用   
  • 来自NHibernate.ITransaction.Commit()
  •   
  • 来自ISession.Flush()
  •