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()