NHibernate 不保存实体
NHibernate not saving entity
我有一个项目,我要将数据从一个数据库移动到另一个数据库。我有几个 table 正在工作,但当前没有。当调用 Session.Save(entity)
时,似乎什么也没有发生(没有从 NHibernate 发送插入记录)。未保存的实体是下面代码中的 Configuration
个实体。我包含了与另一个运行良好的实体相关的其他代码(大约有十几个)。数据正在从 Access 数据库传输到 MSSQL 数据库。
复制对象并执行会话保存的代码。在 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
table:
CREATE TABLE Configuration
(
Name nvarchar(50) PRIMARY KEY,
Value nvarchar(50) DEFAULT '',
Desription nvarchar(100) DEFAULT ''
)
session.Save(...)
不代表SQLINSERT
。
NHibernate 会话的实例表示一个上下文/工作单元,它(甚至隐藏) 数据库操作。
如果需要或我们明确要求,DB WRITE 操作是分批完成的。以及我们如何通过调用
来强制 WRITE 操作 si 的方式
session.Flush();
查看文档的这些部分(所有这些都很有帮助,但这些涵盖会话及其刷新模式)
2.3. Contextual Sessions
和
9.6. Flush
From time to time the ISession will execute the SQL statements needed to synchronize the ADO.NET connection's state with the state of objects held in memory.
- from some invocations of
Find()
or Enumerable()
- from
NHibernate.ITransaction.Commit()
- from
ISession.Flush()
我有一个项目,我要将数据从一个数据库移动到另一个数据库。我有几个 table 正在工作,但当前没有。当调用 Session.Save(entity)
时,似乎什么也没有发生(没有从 NHibernate 发送插入记录)。未保存的实体是下面代码中的 Configuration
个实体。我包含了与另一个运行良好的实体相关的其他代码(大约有十几个)。数据正在从 Access 数据库传输到 MSSQL 数据库。
复制对象并执行会话保存的代码。在 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
table:
CREATE TABLE Configuration
(
Name nvarchar(50) PRIMARY KEY,
Value nvarchar(50) DEFAULT '',
Desription nvarchar(100) DEFAULT ''
)
session.Save(...)
不代表SQLINSERT
。
NHibernate 会话的实例表示一个上下文/工作单元,它(甚至隐藏) 数据库操作。
如果需要或我们明确要求,DB WRITE 操作是分批完成的。以及我们如何通过调用
来强制 WRITE 操作 si 的方式session.Flush();
查看文档的这些部分(所有这些都很有帮助,但这些涵盖会话及其刷新模式)
2.3. Contextual Sessions
和
9.6. Flush
From time to time the ISession will execute the SQL statements needed to synchronize the ADO.NET connection's state with the state of objects held in memory.
- from some invocations of
Find()
orEnumerable()
- from
NHibernate.ITransaction.Commit()
- from
ISession.Flush()