2014-11-12 3 views
2

у меня есть это C# объявление класса:Невозможно запросить поля LINQ поддержанные частного члена

public class Cookie : INotifyPropertyChanged 
{ 
    ..... 
    [Column(Name = "CookieID", IsPrimaryKey = true, IsDbGenerated = true)] 
    public int Id { get; set; } 

    [Column(Name = "CookieName")] 
    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      OnPropertyChanged(@"Name"); 
     } 
    } 
} 

Я выполнить следующий запрос в VB.NET:

m_Data.Cookies.Any(Function(x) x.Name = "selectedproject") 

который встречается с ошибкой " У члена DataModel.Cookie.Name нет поддерживаемого перевода на SQL. "

Запрос свойство Id вместо или изменить свойство имени следующим образом:

[Column(Name = "CookieName")] 
public string Name { get; set; } 

работает отлично, но я не могу генерировать событие PropertyChanged, что мне нужно сообщить пользовательский интерфейс изменения поля. Есть ли способ сделать свойство переводимым на SQL, сохраняя возможность уведомления?

ответ

1

Когда Linq выполняет запрос, любое свойство в нем должно быть сопоставлено с базой данных, так как SQL-запрос не может запускать код C#.

Изменить код:

[NotMapped] 
private string _name; 
[Column(Name = "CookieName")] 
public string Name 

(На самом деле, я не уверен, что частная собственность будет отображаться на SQL, но я добавил [NotMapped] атрибут на всякий случай).

При сопоставлении свойства с геттером/установщиком в базу данных вы можете запросить его (при чтении данных из базы данных он будет запрашивать столбец таблицы).

Примечание: что, как только данные считываются из БД, будет вызываться сеттер, поэтому вы должны изменить свой код, чтобы OnPropertyChanged вызывается только тогда, когда _name не равно null.

+0

Вы абсолютно правы. Я предположил, что свойство setter было вызвано только конечным пользователем базы данных и никогда не было у провайдера. Вот почему я поддержал поле частной собственностью. Конечно, это удалит отображение из свойства в поле, поэтому оно не будет запрашиваться. – Bart

Смежные вопросы