1

nHibernate を使用して内部クラス マッピングから null 値を取得します。以下を参照してください。

public class IndicadorRepository : Repository<IndicadorRepository>
{
    ...
    public Indicador FindById(int indicadorId)
    {
        return _session.Get<Indicador>(indicadorId);
    }
    ...
}

リポジトリ.cs

    public class Repository<T> where T : Repository<T>, new()
    {
        /* Properties */
        protected static T instance;
        public ISession _session;
        public static T Instance
        {
            get
            {
                if (instance == null) instance = new T();
                return instance;
            }    
        }

        /* Constructor */
        protected Repository()
        {
            this._session = SingletonSession.Session;
        }
}

SingletonSession.cs

class SingletonSession
{
    protected static ISession _session;
    public static ISession Session
    {
        get
        {
            if (_session == null)
            {
                try
                {
                    var cfg = new Configuration();
                    cfg.Configure();
                    cfg.AddAssembly(typeof(Objetivo).Assembly);
                    var schema = new SchemaUpdate(cfg);
                    schema.Execute(true, true);
                    // Get ourselves an NHibernate Session
                    var sessions = cfg.BuildSessionFactory();
                    _session = sessions.OpenSession();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
            return _session;
        }
    }
}

ここから問題が始まります

Indicador.csこのクラスは nhibernate にマッピングされています。

public class Indicador : Modelo<Indicador>
{
     public virtual string Nombre { get; set;}

     /************* Constructor *************/
    public Indicador()
    {
        // Pay attention to line below
        Console.WriteLine("Property from Inside: " + Nombre); 
    }
}

SomeForm.cs

...
private void ConfigurarIndicadoresDataGrid()
{
    // Pay attention to line below
    Console.WriteLine("Property from Outside: {0}", IndicadorRepository.Instance.FindById(1).Nombre); 
}
...

出力結果:

Property from Inside:

Property from Outside: This is the name of indicador 1

クラス内のプロパティ値Indicadorが null で、クラス外が読み込まれるのはなぜですか? 私は何を間違っていますか?

4

1 に答える 1

2

質問を誤解したのかもしれませんが、タイミングの問題のようです。

Console.WriteLine("Property from Inside: " + Nombre);

その時点でデータベースにバインドされていないオブジェクトに対して、コンストラクターでプロパティ値にアクセスして表示しようとしています。このプロパティに特定の値を設定する必要があるのはなぜですか?

 Console.WriteLine("Property from Outside: {0}", IndicadorRepository.Instance.FindById(1).Nombre); 

データベースからロードされたばかりのオブジェクトの値を表示しています。それには(うまくいけば)価値があります

于 2013-03-12T09:33:20.937 に答える