¿Cómo usar Dapper con validaciones de interfaz IDataErrorInfo?

c# dapper idataerrorinfo sqlite

Pregunta

Soy nuevo en ORM así que por favor tenga calma para responder mi pregunta. Construí una clase de administrador de POCO con atributos de Dapper e implementé IDataErrorInfo para validaciones en mis clases de modelo aquí:

public partial class Admin: IDataErrorInfo {

    [Key]
    public long Admin_Id { get; set; }
    public string Admin_Name { get; set; }
    public string Password { get; set; }
    public virtual IEnumerable<Verifying_Agent> Verifying_Agent { get; set; }

    public string Error
    {
        get { throw new NotImplementedException(); }
    }
    public string this[string columnName]
    {
        get
        {
            switch (columnName)
            {
                case "Admin_Name":
                    if (string.IsNullOrEmpty(Admin_Name))
                        return "Admin Name is required";
                    break;
                case "Password":
                    if (string.IsNullOrEmpty(Password))
                        return "Password is Required";
                    break;

            }
            return "";
        }
    }
}

Pero cuando ejecuto la biblioteca Dapper.Simple CRUD para una operación simple de CRUD, es decir,

conn= new SQLiteConnection("Data Source=" + Environment.CurrentDirectory + "\\SystemDB.db");
 var admit = conn.Get<Admin>("select * from Admin");

Obtengo el siguiente error "Columna o base de datos no existe"

Si bien elimino la implementación de IDataErrorInfo, el error desaparecerá. ¿Hay algo que me falta cuando uso Dapper o hay un error en esta biblioteca?

Respuesta aceptada

No creo que haya un error en la biblioteca y no he podido reproducir el problema a pesar de crear una clase casi idéntica y realizar una consulta similar en una base de datos SQLite.

Esta es la clase que utilicé:

class Post : IDataErrorInfo
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Markdown { get; set; }

    public string Error
    {
        get { throw new NotImplementedException(); }
    }
    public string this[string columnName]
    {
        get
        {
            switch (columnName)
            {
                case "Title":
                    if (string.IsNullOrEmpty(Title))
                        return "Title is required";
                    break;
                case "Markdown":
                    if (string.IsNullOrEmpty(Markdown))
                        return "Markdown is required";
                    break;
            }
            return "";
        }
    }
}

y así es como pregunté al DB:

using (var conn = new SQLiteConnection("Data Source=" + Environment.CurrentDirectory + "\\Blog.sqlite"))
{
    var posts = conn.Query<Post>("SELECT * FROM Posts");
    Console.WriteLine(posts.Count() + " post(s) retrieved");
}

No estoy seguro de qué está causando su problema, pero estoy bastante seguro de que no es Dapper.

Estoy desconcertado sobre por qué eliminar la interfaz IDataErrorInfo afectaría este error:

Columna o base de datos no existe

Parece que la consulta debería fallar independientemente del tipo que intente llenar.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué