如何将 Dapper 与 IDataErrorInfo 接口验证一起使用?
How to use Dapper with IDataErrorInfo Interface validations?
我是ORM新手,所以请冷静回答我的问题。
我已经构建了一个 POCO admin class,它具有 Dapper 属性并实现了 IDataErrorInfo 用于在我的模型 classes 上进行验证
这里:
public 部分 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 "";
}
}
}
但是当我为简单的 CRUD 操作执行 Dapper.Simple CRUD 库时
即
conn= new SQLiteConnection("Data Source=" + Environment.CurrentDirectory + "\SystemDB.db");
var admit = conn.Get<Admin>("select * from Admin");
我收到以下错误 "Column or Database not exist"
如果我删除 IDataErrorInfo 实现,错误就会消失。
在使用 Dapper 时我是否遗漏了什么或者这个库中有错误?
我认为库中没有错误,尽管创建了一个几乎相同的 class 并对 SQLite 数据库执行了类似的查询,但我一直无法重现您的问题。
这是我用的class:
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 "";
}
}
}
这就是我查询数据库的方式:
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");
}
我不确定是什么导致了您的问题,但我很确定这不是 Dapper。
我很困惑为什么删除 IDataErrorInfo 接口会影响此错误:
Column or Database not exist
听起来无论您尝试填充的类型如何,查询都应该失败。
我是ORM新手,所以请冷静回答我的问题。 我已经构建了一个 POCO admin class,它具有 Dapper 属性并实现了 IDataErrorInfo 用于在我的模型 classes 上进行验证 这里:
public 部分 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 "";
}
}
}
但是当我为简单的 CRUD 操作执行 Dapper.Simple CRUD 库时 即
conn= new SQLiteConnection("Data Source=" + Environment.CurrentDirectory + "\SystemDB.db");
var admit = conn.Get<Admin>("select * from Admin");
我收到以下错误 "Column or Database not exist"
如果我删除 IDataErrorInfo 实现,错误就会消失。 在使用 Dapper 时我是否遗漏了什么或者这个库中有错误?
我认为库中没有错误,尽管创建了一个几乎相同的 class 并对 SQLite 数据库执行了类似的查询,但我一直无法重现您的问题。
这是我用的class:
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 "";
}
}
}
这就是我查询数据库的方式:
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");
}
我不确定是什么导致了您的问题,但我很确定这不是 Dapper。
我很困惑为什么删除 IDataErrorInfo 接口会影响此错误:
Column or Database not exist
听起来无论您尝试填充的类型如何,查询都应该失败。