如何使用Dapper与IDataErrorInfo接口验证

本文关键字:接口 验证 IDataErrorInfo 何使用 Dapper | 更新日期: 2023-09-27 18:02:16

我是ORM的新手,所以请冷静地回答我的问题。我已经建立了一个带有Dapper属性的POCO管理类,并实现了IDataErrorInfo,用于对我的模型类进行验证:

公共部分类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 "";
        }
    }
}

但是当我执行Dapper。用于简单CRUD操作的简单CRUD库即

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

我得到以下错误"列或数据库不存在"

而如果我删除IDataErrorInfo实现错误消失。在使用Dapper或在这个库中有一个bug时,我是否缺少一些东西?

如何使用Dapper与IDataErrorInfo接口验证

我不相信库中有bug,尽管创建了几乎相同的类并对SQLite数据库执行了类似的查询,但我一直无法重现您的问题。

这是我使用的类:

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 "";
        }
    }
}

,这是我如何查询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");
}

我不确定是什么引起了你的问题,但我相当肯定不是Dapper的问题。

我很困惑,为什么删除IDataErrorInfo接口会影响这个错误:

列或数据库不存在

听起来,不管您尝试填充的类型是什么,查询都应该失败。