Estoy jugando con Dapper por primera vez. Parece una pequeña herramienta muy práctica. Pero me estoy encontrando con un problema. En la pequeña aplicación de consola a continuación, el primer método se ejecuta como se esperaba. Sin embargo, el segundo método devuelve este error:
Se produjo una excepción no controlada del tipo 'System.InvalidOperationException' en System.Data.dll. Información adicional: La propiedad ConnectionString no se ha inicializado.
Puedo cambiar el orden de los métodos y obtener los mismos resultados. Siempre es en la segunda llamada que recibo el error. No estoy seguro de lo que estoy haciendo mal. También traté de no usar el db.Close (), pero obtuve el mismo resultado.
El error está en esta línea en cualquier método que se llame segundo:
db.Open();
¿Algunas ideas? ¡Gracias!
class Program
{
static IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DapperConnection"].ToString());
static void Main(string[] args)
{
IEnumerable<Policy> policy1 = PolicySelectAll();
IEnumerable<Policy> policy2 = PolicyFindByLastFour("093D");
}
public static IEnumerable<Policy> PolicySelectAll()
{
var sql = "SELECT * FROM Policy";
IEnumerable<Policy> policy;
using (db)
{
db.Open();
policy = db.Query<Policy>(sql);
db.Close();
}
return policy;
}
public static IEnumerable<Policy> PolicyFindByLastFour(string LastFour)
{
var sql = string.Format("SELECT * FROM Policy WHERE PolicyNumber LIKE '%{0}'", LastFour);
IEnumerable<Policy> policy;
using (db)
{
db.Open();
policy = db.Query<Policy>(sql);
db.Close();
}
return policy;
}
}
EDITAR DESPUÉS:
Basado en las respuestas, así es como lo resolví:
class Program
{
static string connectionString = ConfigurationManager.ConnectionStrings["DapperConnection"].ToString();
static void Main(string[] args)
{
IEnumerable<Policy> policy1 = PolicySelectAll();
IEnumerable<Policy> policy2 = PolicyFindByLastFour("093D");
}
public static IDbConnection GetConnection()
{
return new SqlConnection(connectionString);
}
public static IEnumerable<Policy> PolicySelectAll()
{
IDbConnection db = GetConnection();
var sql = "SELECT * FROM Policy";
IEnumerable<Policy> policy;
using (db)
{
db.Open();
policy = db.Query<Policy>(sql);
db.Close();
}
return policy;
}
public static IEnumerable<Policy> PolicyFindByLastFour(string LastFour)
{
IDbConnection db = GetConnection();
var sql = string.Format("SELECT * FROM Policy WHERE PolicyNumber LIKE '%{0}'", LastFour);
IEnumerable<Policy> policy;
using (db)
{
db.Open();
policy = db.Query<Policy>(sql);
db.Close();
}
return policy;
}
}
si mueve su definición de db al alcance del método, estará bien. ES DECIR
class Program
{
static void Main(string[] args)
{
IEnumerable<Policy> policy1 = PolicySelectAll();
IEnumerable<Policy> policy2 = PolicyFindByLastFour("093D");
}
public static IEnumerable<Policy> PolicySelectAll()
{
var sql = "SELECT * FROM Policy";
IEnumerable<Policy> policy;
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DapperConnection"].ToString()))
{
db.Open();
policy = db.Query<Policy>(sql);
db.Close();
}
return policy;
}
public static IEnumerable<Policy> PolicyFindByLastFour(string LastFour)
{
var sql = string.Format("SELECT * FROM Policy WHERE PolicyNumber LIKE '%{0}'", LastFour);
IEnumerable<Policy> policy;
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DapperConnection"].ToString()))
{
db.Open();
policy = db.Query<Policy>(sql);
db.Close();
}
return policy;
}
}
}