基本的Fluent NHibernate程序编译并运行,但不会将任何内容保存到数据库或从数据库加载

基本的Fluent NHibernate程序编译并运行,但不会将任何内容保存到数据库或从数据库加载,nhibernate,fluent-nhibernate,linq-to-nhibernate,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,我正在尝试一个非常简单的Fluent Nhibernate示例: 带有一个表的SQL 2005数据库,VS2008控制台应用程序。该表在程序启动前有一条记录 我试图添加一条记录,然后显示表中的所有记录。程序成功编译并运行,无任何异常,但不显示任何记录。HBM映射文件也未创建。看起来程序完全忽略了数据库(尽管它连接到数据库) 这是我的代码-我尽量将其最小化: 实体: namespace FluentNhibernationConsole.Entities { public class So

我正在尝试一个非常简单的Fluent Nhibernate示例: 带有一个表的SQL 2005数据库,VS2008控制台应用程序。该表在程序启动前有一条记录

我试图添加一条记录,然后显示表中的所有记录。程序成功编译并运行,无任何异常,但不显示任何记录。HBM映射文件也未创建。看起来程序完全忽略了数据库(尽管它连接到数据库)

这是我的代码-我尽量将其最小化:

实体:

namespace FluentNhibernationConsole.Entities
{
    public class Sorder
    {
        public virtual int Id { get; private set; }
        public virtual DateTime DateCreated { get; set; }

    }
}
映射:

namespace FluentNhibernationConsole.Mappings
{
    class SorderMap : ClassMap<Sorder>
    {
        public SorderMap()
        {
            Id(x => x.Id, "SorderId");
            Map(x => x.DateCreated);
        }
    }
}
namespace fluentnhibernationsole.Mappings
{
类分类映射:类映射
{
公共分类地图()
{
Id(x=>x.Id,“SorderId”);
映射(x=>x.DateCreated);
}
}
}
程序本身:

namespace FluentNhibernationConsole
{
    class Program
    {
         private static ISessionFactory CreateSessionFactory()
        {
            return Fluently.Configure()
                .Database(MsSqlConfiguration
                    .MsSql2005
                    .ShowSql()
                    .ConnectionString(@"server=.\sqlexpress;database=lsdb;Integrated Security=SSPI;")
                )
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>()
                    .ExportTo(@"d:\temp\nh")
                )
                .BuildSessionFactory();
        }

        static void Main(string[] args)
        {
            var sessionFactory = CreateSessionFactory();
            using (var session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    var order1 = new Sorder {DateCreated = DateTime.Now};
                    transaction.Commit();
                }
                using (session.BeginTransaction())
                    foreach (var order in session.CreateCriteria(typeof(Sorder)).List<Sorder>())
                        Console.WriteLine("Order: " + order.DateCreated.ToLongTimeString());
            }
            Console.ReadKey();
        }

    }
}
名称空间FluentNhibernationConsole
{
班级计划
{
私有静态ISessionFactory CreateSessionFactory()
{
流畅地返回。Configure()
.数据库(MSSQL)配置
MsSql2005
.ShowSql()
.ConnectionString(@“服务器=。\sqlexpress;数据库=lsdb;集成安全性=SSPI;”)
)
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.ExportTo(@“d:\temp\nh”)
)
.BuildSessionFactory();
}
静态void Main(字符串[]参数)
{
var sessionFactory=CreateSessionFactory();
使用(var session=sessionFactory.OpenSession())
{
使用(var transaction=session.BeginTransaction())
{
var order1=new Sorder{DateCreated=DateTime.Now};
Commit();
}
使用(session.BeginTransaction())
foreach(session.CreateCriteria(typeof(Sorder)).List()中的变量顺序)
Console.WriteLine(“Order:+Order.DateCreated.ToLongTimeString());
}
Console.ReadKey();
}
}
}

正如您已经注意到的,您忘记保存()您的新实体

using (var transaction = session.BeginTransaction())
{
    var order1 = new Sorder {DateCreated = DateTime.Now};
    session.Save( order1 );
    transaction.Commit();
}
你的类映射应该是公共的

public class SorderMap : ClassMap<Sorder>
公共类SorderMap:ClassMap

哦,我刚刚意识到我没有在transaction.Commit之前调用SaveOrUpdate。然而,如果我调用它,就会得到映射异常“No persister for:fluentnhibernationsolle.Entities.Sorder”。这是什么意思?哦,谢谢,现在我明白我把事情搞砸了。现在一切正常:)