为什么FluentNhibernate为现有行返回NullReference?

为什么FluentNhibernate为现有行返回NullReference?,nhibernate,fluent-nhibernate,primary-key,nullreferenceexception,Nhibernate,Fluent Nhibernate,Primary Key,Nullreferenceexception,我没有从该设置中获取对象 table SPEC ( Special_Name varchar2 pk Signal integer Created_At date) namespace App { public class Strategy { public virtual string Id { get; private set; } public virtual int Signal { get; set; } p

我没有从该设置中获取对象

table SPEC (
  Special_Name varchar2 pk
  Signal integer
  Created_At date)

namespace App
{
    public class Strategy
    {
        public virtual string Id { get; private set; }
        public virtual int Signal { get; set; }
        public virtual DateTime CreatedAt { get; set; }
    }

    public class StrategyMap : ClassMap<Strategy>
    {
        public StrategyMap()
        {
            this.Table("SPEC");
            this.Id(x => x.Id).Column("Special_Name");
            Map(x => x.Signal).Column("Signal");
            Map(x => x.CreatedAt).Column("Created_At");
        }
    }
}

namespace App.Tests
{
    public class StrategyMapTest
    {
        private ISessionFactory sessionFactory;

        public StrategyMapTest()
        {
            this.sessionFactory = this.CreateSessionFactory();
        }

        [Fact]
        public void Can_read_from_database()
        {
            using (var session = this.sessionFactory.OpenSession())
            {
                var fromDb = session.Get<Strategy>("Foo 1");
                Assert.Equal("Foo 1", fromDb.Id);
                Assert.Equal("1", fromDb.Signal);
                Assert.Equal(new DateTime(2011,1,1), fromDb.CreatedAt);
            }
        }

        private ISessionFactory CreateSessionFactory()
        {
            return Fluently.Configure()
                .Database(OracleClientConfiguration
                    .Oracle10
                    .ConnectionString("connString"))
                .Mappings(m => m.FluentMappings
                    .AddFromAssemblyOf<Strategy>()
                    .ExportTo(@"C:\logs"))
                .BuildSessionFactory();
        }
    }
}
我导出的映射如下所示

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class xmlns="urn:nhibernate-mapping-2.2" name="App.Strategy, App, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0af8b89e104ed570" table="SPEC">
    <id access="backfield" name="Id" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Special_Name" />
      <generator class="assigned" />
    </id>
    <property name="Signal" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Signal" />
    </property>
    <property name="CreatedAt" type="System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Created_At" />
    </property>
  </class>
</hibernate-mapping>

您是否检查了是否向数据库发送了任何SQL查询?您可以在数据库中使用探查器,或者最好的方法是使用(商业版,但有免费试用版)

如果没有发送SQL,则说明您的配置存在一些问题(乍一看似乎还可以)
如果您确实看到一个SQL查询被发送,您可能会通过查看它来了解问题所在

如果表中包含数据,那么查询是有效的。不知怎的,它从昨天起就被删除了。我使用.Oracle10.ShowSql().ConnectionString(“connString”)方法通过XUnitGUI运行程序查看输出。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class xmlns="urn:nhibernate-mapping-2.2" name="App.Strategy, App, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0af8b89e104ed570" table="SPEC">
    <id access="backfield" name="Id" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Special_Name" />
      <generator class="assigned" />
    </id>
    <property name="Signal" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Signal" />
    </property>
    <property name="CreatedAt" type="System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Created_At" />
    </property>
  </class>
</hibernate-mapping>