2016-08-14 11 views
0

Я новичок в ORM, поэтому, пожалуйста, будьте спокойны, чтобы ответить на мой вопрос. Я построил класс администратора POCO с Dapper атрибуты и Реализовано IDataErrorInfo для валидаций на моей модели классов здесь:Как использовать Dapper с проверками интерфейса IDataErrorInfo?

общественный частичный класс администратора: 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 или есть ошибка в этой библиотеке?

+0

В строке 'var admit = conn. ("select * from Admin"); '. Не могли бы вы подтвердить, что вы имеете в виду «var admit = conn.Query (« select * from Admin »);' –

ответ

0

Я не верю, что в библиотеке есть ошибка, и я не смог воспроизвести вашу проблему, несмотря на создание почти идентичного класса и выполнение аналогичного запроса с базой данных 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 затронет эту ошибку:

Column or Database not exist

Это звучит, как запрос должен быть не в состоянии независимо от того типа, который вы пытаетесь заполнить.

+0

Я согласен, что нет проблем с Библиотекой Dapper. , но я говорю о Dapper.Simple CRUD-библиотеке, которая содержит встроенные CRUD-операции, такие как Get, GetAll, Update и т. Д. – Abdullah