0

私はシングルトン デザイン パターンを使用しており、オブジェクトが以前に使用されていない場合はオブジェクトを返す必要があります。次のコードで例外が発生します。

namespace app.Models
{
    public class Conexion:DbContext
    {    
        private static Conexion Instance = null;
        private Conexion(string con) : base(con) { }
        public static Conexion MainConexion 
        {
            get {//error here
                if (Instance == null)
                {
                    Instance = new Conexion(@"Server=*****; User Id=***;Password=****; Database=****");
                }
                return Instance;
            }
        }
        public DbSet<label> Labels { get; set; }
        public DbSet<checke_status> CheckStatus { get; set; }

        public void SaveChanges()
        {
            MainConexion.SaveChanges();
        }
    }
}

どうすればこれを解決できますか?

4

1 に答える 1

2

SaveChangesメソッドのオーバーライドを削除します。

namespace app.Models
{
    public class Conexion : DbContext
    {
        private static Conexion Instance = null;

        private Conexion(string con) : base(con) { }

        public static Conexion MainConexion 
        {
            get
            { //error here
                if (Instance == null)
                {
                    Instance = new Conexion(
                        @"Server=*****; User Id=***;Password=****; Database=****");
                }

                return Instance;
            }
        }

        public DbSet<label> Labels { get; set; }

        public DbSet<checke_status> CheckStatus { get; set; }
    }
}

プライベート コンストラクターがあるため、使用できるこのクラスの唯一のインスタンスは、MainConexionプロパティで公開されているものです。インスタンスのメソッドが呼び出されたときに、プロパティのインスタンスのSaveChangesメソッドが呼び出されたことを確認しようとしていたようです。クラスのインスタンスは 1 つしか持てないため、これは必要ありません。呼び出したいのはそのインスタンスです。使用方法は同じです。SaveChangesMainConnectionConexionSaveChanges

Conexion.MainConexion.SaveChanges();

そうは言っても、このように実装しない方が幸運だと思います。単一の接続インスタンスに依存するよりも、必要に応じて接続を開いたり閉じたりする方がよいでしょう。接続が中断されるとどうなりますか? 単一のエラーが発生するのではなく、アプリケーションが壊れます。

于 2013-03-24T03:13:59.350 に答える