【问题标题】:How to use Dapper with IDataErrorInfo Interface validations?如何使用 Dapper 和 IDataErrorInfo 接口验证?
【发布时间】:2016-08-14 08:50:02
【问题描述】:

我是 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.Simple CRUD 库以进行简单 CRUD 操作时 即

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

我收到以下错误“列或数据库不存在”

如果我删除 IDataErrorInfo 实现,错误就会消失。 我在使用 Dapper 时是否遗漏了什么或者这个库中有错误?

【问题讨论】:

  • var admit = conn.&lt;Admin&gt;("select * from Admin"); 行有错误。您能否确认您的意思是var admit = conn.Query&lt;Admin&gt;("select * from Admin");

标签: c# sqlite dapper idataerrorinfo


【解决方案1】:

我认为库中没有错误,尽管创建了几乎相同的类并对 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 "";
        }
    }
}

这就是我查询数据库的方式:

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 接口会影响这个错误:

列或数据库不存在

听起来无论您尝试填充哪种类型,查询都应该失败。

【讨论】:

  • 我同意 Dapper 库没有问题。但我在谈论 Dapper.Simple CRUD 库,其中包含 Get、GetAll、Update 等内置 CRUD 操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多