NHibernate没有保存实体

Mar*_*k E 6 c# nhibernate fluent-nhibernate

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)

制图 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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

制图 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

创建Configuration表的代码:

CREATE TABLE Configuration
(
    Name nvarchar(50) PRIMARY KEY,
    Value nvarchar(50) DEFAULT '',
    Desription nvarchar(100) DEFAULT ''
)
Run Code Online (Sandbox Code Playgroud)

Rad*_*ler 7

session.Save(...)并不意味着SQL INSERT

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

如果需要或我们明确要求,则可以分批完成DB WRITE操作。以及如何通过调用来强制WRITE操作si的方式

session.Flush();
Run Code Online (Sandbox Code Playgroud)

检查文档的这些部分(它们都对您有所帮助,但这些内容涵盖了会话及其“刷新”模式)

2.3。上下文会话

9.6。冲洗

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

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