我正在使用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();
}
}
}
我该如何解决这个问题?
答案 0 :(得分: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();
话虽如此,如果您不以这种方式实施,我认为您会有更好的运气。在需要时打开和关闭连接可能会更好,而不是依赖单个连接实例。如果连接中断会发生什么?不会出现任何错误,您的应用程序将被破坏。