Sono nuovo di ORM quindi per favore sii calmo per rispondere alla mia domanda. Ho creato una classe admin POCO con gli attributi Dapper e Implementata IDataErrorInfo per le convalide sulle mie classi Model Qui:
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 "";
}
}
}
Ma quando eccito Dapper.Semplice libreria CRUD per operazione CRUD semplice ie
conn= new SQLiteConnection("Data Source=" + Environment.CurrentDirectory + "\\SystemDB.db");
var admit = conn.Get<Admin>("select * from Admin");
ottengo il seguente errore "Colonna o database non esistente"
Mentre se rimuovo IDataErrorInfo implementaion l'errore va via. C'è qualcosa che mi manca mentre uso Dapper o c'è un bug in questa libreria?
Non credo che ci sia un bug nella libreria e non sono stato in grado di riprodurre il problema nonostante la creazione di una classe quasi identica e l'esecuzione di una query simile su un database SQLite.
Questa è la classe che ho usato:
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 "";
}
}
}
e questo è il modo in cui ho interrogato il 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");
}
Non sono sicuro di cosa stia causando il tuo problema, ma sono abbastanza sicuro che non è Dapper.
Sono sconcertato sul motivo per cui la rimozione dell'interfaccia IDataErrorInfo influirebbe su questo errore:
Colonna o database non esistenti
Sembra che la query debba fallire indipendentemente dal tipo che stai cercando di popolare.