Ich bin neu in ORM, also bitte sei ruhig, um meine Frage zu beantworten. Ich habe eine POCO-Admin-Klasse mit Dapper-Attributen erstellt und IDataErrorInfo für Validierungen meiner Model-Klassen implementiert. Hier:
Öffentliche Teilklasse 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 "";
}
}
}
Aber wenn ich Dapper.Simple CRUD-Bibliothek für einfache CRUD-Operation dh
conn= new SQLiteConnection("Data Source=" + Environment.CurrentDirectory + "\\SystemDB.db");
var admit = conn.Get<Admin>("select * from Admin");
Ich erhalte folgenden Fehler "Spalte oder Datenbank nicht vorhanden"
Während, wenn ich die IDataErrorInfo-Implementierung entferne, verschwindet der Fehler. Gibt es etwas, das ich vermisse, wenn ich Dapper benutze oder ein Bug in dieser Bibliothek ist?
Ich glaube nicht, dass es einen Fehler in der Bibliothek gibt und ich konnte Ihr Problem trotz der Erstellung einer fast identischen Klasse und einer ähnlichen Abfrage für eine SQLite-Datenbank nicht reproduzieren.
Dies ist die Klasse, die ich verwendet habe:
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 "";
}
}
}
und so habe ich die db abgefragt:
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");
}
Ich bin mir nicht sicher, was Ihr Problem verursacht, aber ich bin ziemlich sicher, dass es nicht Dapper ist.
Ich bin verwirrt, warum das Entfernen der IDataErrorInfo-Schnittstelle diesen Fehler beeinflussen würde:
Spalte oder Datenbank nicht vorhanden
Das klingt, als ob die Abfrage fehlschlagen sollte, unabhängig vom Typ, den Sie zu füllen versuchen.