我有这个C#类声明:
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属性,或更改name属性,如下所示:
[Column(Name = "CookieName")]
public string Name { get; set; }
工作正常,但后来我无法生成PropertyChanged事件,我需要通知UI字段更改。有没有办法使属性可以转换为SQL,同时保留通知能力?
答案 0 :(得分:1)
当Linq执行查询时,其中的任何属性都必须映射到数据库,因为SQL查询无法运行C#代码。
将您的代码更改为:
[NotMapped]
private string _name;
[Column(Name = "CookieName")]
public string Name
(实际上,我不确定私有属性是否会映射到SQL,但我已经添加了[NotMapped]属性以防万一)。
通过将带有getter / setter的属性映射到数据库,您可以通过它进行查询(从数据库中读取数据时,它将根据表列进行查询)。
注意:只要从数据库中读取数据,就会调用setter,因此您应该修改代码,以便仅在_name不为null时调用OnPropertyChanged。