我有一个项目,我将数据从数据库移动到另一个。我有几张桌子在工作,但目前的桌子不是。当调用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
答案 0 :(得分:4)
session.Save(...)
并不代表SQL INSERT
。
NHibernate会话的实例表示上下文/工作单元,它(甚至隐藏)数据库操作。
DB WRITE操作分批完成,如果需要或我们明确要求。以及如何通过调用
强制WRITE操作的方式session.Flush();
检查文档的这些部分(所有这些部分都很有用,但这些部分涵盖了会话及其Flush模式)
和
ISession将不时执行将ADO.NET连接状态与内存中保存的对象状态同步所需的SQL语句。
- 来自
的某些调用Find()
或Enumerable()
- 来自
NHibernate.ITransaction.Commit()
- 来自
ISession.Flush()