Linq NHib 3配置和映射是否返回空结果?

Linq NHib 3配置和映射是否返回空结果?,linq,oracle,nhibernate,odp.net,nhibernate-3,Linq,Oracle,Nhibernate,Odp.net,Nhibernate 3,注意:我不是特别使用Fluent NHibernate,而是使用3.x的内置映射样式。然而,当我认为应该返回记录时,我得到了一个空白记录集 我肯定我做错了什么事,这让我很恼火 背景/设置 我有一个Oracle 11g数据库,用于IBM的一个名为Maximo的产品 该产品有一个名为workorder的表,其中列出了workorder;该表有一个名为wonum的字段,表示唯一的工作订单号。 我有一个报告用户,可以通过maximo模式访问表 e、 g.从maximo.workorder中选择* 我正在

注意:我不是特别使用Fluent NHibernate,而是使用3.x的内置映射样式。然而,当我认为应该返回记录时,我得到了一个空白记录集

我肯定我做错了什么事,这让我很恼火

背景/设置 我有一个Oracle 11g数据库,用于IBM的一个名为Maximo的产品 该产品有一个名为workorder的表,其中列出了workorder;该表有一个名为wonum的字段,表示唯一的工作订单号。 我有一个报告用户,可以通过maximo模式访问表 e、 g.从maximo.workorder中选择* 我正在使用Oracle的托管ODP.NET DLL来完成数据任务,并且是第一次使用它。 我尝试过的事情 我创建了一个基本的控制台应用程序来测试这一点 我在主分支上添加了NHibernate.Driver.cs中的OracleManagedClientDriver.cs,我正在使用的版本中没有正式的版本。 我创建了一个名为WorkorderBriefBrief的POCO,它只有一个WorkorderNumber字段。 我创建了一个类映射WorkorderBriefBriefMap,它只将该值映射为只读值。 我创建了一个带有控制台输出的控制台应用程序,试图写入工作单行。 会话和事务似乎打开正确, 我测试了连接字符串的标准ODP.NET OracleConnection 代码 POCO:WorkorderBriefBrief.cs 映射:WorkorderBriefBriefMap.cs
在配置NHibernate时,您需要告诉它您的映射。

我找到了答案-多亏了Oskar最初的建议,我意识到不仅仅是我没有添加程序集,我还需要创建一个新的映射器

为此,在构建会话工厂之前,我在配置中添加了以下代码:

var mapper = new ModelMapper();

//define mappingType(s) -- could be an array; in my case it was just 1
var mappingType = typeof (WorkorderBriefBriefMap);

//use AddMappings instead if you're mapping an array
mapper.AddMapping(mappingType);

//add the compiled results of the mapper to the configuration
cfg.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
var factory = cfg.BuildSessionFactory();

为NHibernate.SQL记录器启用调试日志记录,并查看实际使用的SQL。嗨,奥斯卡。我已经启用了db.logdqlincole,并更新了上面的代码示例。这就是你说的吗?噢!谢谢更新了代码。快速提问:您看到类映射不执行的原因了吗?使用NHProf尝试诊断并添加程序集时,我看到警告:在程序集中找不到映射文档,但WorkorderBriefBriefMap继承自ClassMap。这不对吗?
using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;
using PEApps.Model.WorkorderQuery;

namespace ConsoleTests
{
    public class WorkorderBriefBriefMap : ClassMapping<WorkorderBriefBrief>
    {
        public WorkorderBriefBriefMap()
        {
            Schema("MAXIMO");
            Table("WORKORDER");


            Property(x=>x.WorkorderNumber, m =>
                {
                    m.Access(Accessor.ReadOnly);
                    m.Column("WONUM");
                });
          }
    }
}
namespace ConsoleTests
{
    class Program
    {
        static void Main(string[] args)
        {
            NHibernateProfiler.Initialize();
            try
            {
                var cfg = new Configuration();
                cfg
                   .DataBaseIntegration(db =>
                   {
                       db.ConnectionString = "[Redacted]";
                       db.Dialect<Oracle10gDialect>();
                       db.Driver<OracleManagedDataClientDriver>();
                       db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
                       db.BatchSize = 500;
                       db.LogSqlInConsole = true;
                   })
                   .AddAssembly(typeof(WorkorderBriefBriefMap).Assembly)
                   .SessionFactory().GenerateStatistics();

                var factory = cfg.BuildSessionFactory();

                List<WorkorderBriefBrief> query;

                using (var session = factory.OpenSession())
                {
                    Console.WriteLine("session opened");
                    Console.ReadLine();
                    using (var transaction = session.BeginTransaction())
                    {
                        Console.WriteLine("transaction opened");
                        Console.ReadLine();
                        query =
                            (from workorderbriefbrief in session.Query<WorkorderBriefBrief>() select workorderbriefbrief)
                                .ToList();
                        transaction.Commit();
                        Console.WriteLine("Transaction Committed");
                    }
                }

                Console.WriteLine("result length is {0}", query.Count);
                Console.WriteLine("about to write WOs");

                foreach (WorkorderBriefBrief wo in query)                
                {
                    Console.WriteLine("{0}", wo.WorkorderNumber);
                }

                Console.WriteLine("DONE!");
                Console.ReadLine();

                // Test a standard connection below
                string constr = "[Redacted]";

                OracleConnection con = new OracleConnection(constr);
                con.Open();
                Console.WriteLine("Connected to Oracle Database {0}, {1}", con.ServerVersion, con.DatabaseName.ToString());
                con.Dispose();

                Console.WriteLine("Press RETURN to exit.");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error : {0}", ex);
                Console.ReadLine();
            }
        }
    }
}
   // Test a standard connection below
            string constr = "[Redacted]";

            OracleConnection con = new Oracle.ManagedDataAccess.Client.OracleConnection(constr);
            con.Open();
            Console.WriteLine("Connected to Oracle Database {0}, {1}", con.ServerVersion, con.DatabaseName);
            var cmd = new OracleCommand();
            cmd.Connection = con;
            cmd.CommandText = "select wonum from maximo.workorder where upper(reportedby) = 'MAXADMIN'";
            cmd.CommandType = CommandType.Text;
            Oracle.ManagedDataAccess.Client.OracleDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(reader.GetString(0));
            }

            con.Dispose();
var mapper = new ModelMapper();

//define mappingType(s) -- could be an array; in my case it was just 1
var mappingType = typeof (WorkorderBriefBriefMap);

//use AddMappings instead if you're mapping an array
mapper.AddMapping(mappingType);

//add the compiled results of the mapper to the configuration
cfg.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
var factory = cfg.BuildSessionFactory();