0

我正在使用 Singleton 设计模式,如果之前没有使用过,我必须返回该对象。我在以下代码中遇到异常:

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方法时调用属性实例SaveChanges上的方法。MainConnection这不是必需的,因为您只能拥有Conexion该类的一个实例,而它就是您要调用的实例SaveChanges。用法还是一样的:

Conexion.MainConexion.SaveChanges();

话虽这么说,我认为如果您不以这种方式实现它,您的运气会更好。根据需要打开和关闭连接可能会更好,而不是依赖于单个连接实例。如果连接中断会发生什么?您的应用程序将被破坏,而不是得到一个错误。

于 2013-03-24T03:13:59.350 回答