Windows Phone 8 现有数据库 InvalidCastException: 指定的转换无效
Windows Phone 8 existing database InvalidCastException: Specified cast is not valid
我正在使用预先填充的数据库。当应用程序启动时,我将数据库从资产复制到 isostore。
实体:
[Table(Name = "NAMES")]
public class NameItem: INotifyPropertyChanged,
INotifyPropertyChanging {
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangingEventHandler PropertyChanging;
private string _nameString;
private int _id;
[Column(IsPrimaryKey = true, IsDbGenerated = true, Name = "_id")]
public int NameId {
get {
return _id;
}
set {
if (value != _id) {
OnPropertyChanging("NameId");
_id = value;
OnPropertyChanged("NameId");
}
}
}
[Column(IsPrimaryKey = false, Name = "NAME_TEXT")]
public String NameString {
get {
return _nameString;
}
set {
if (_nameString != value) {
OnPropertyChanging("NameString");
_nameString = value;
OnPropertyChanged("NameString");
}
}
}
}
这里我尝试从数据库中读取数据:
using(var db = new MyDataContext("isostore:/Database/ff.sdf")) {
var allNameItems = db.NameItems.ToArray(); // exception on this line
try {
MessageBox.Show(allNameItems[0].NameString);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
使用此代码我得到 InvalidCastException,但 db.NameItems.Count() 有效。
好的,我读了这个 question 并发现了问题,我在数据库中的 id
字段是 BigInt 而在实体中是 int
。我将其更改为 long
并且有效。
我正在使用预先填充的数据库。当应用程序启动时,我将数据库从资产复制到 isostore。 实体:
[Table(Name = "NAMES")]
public class NameItem: INotifyPropertyChanged,
INotifyPropertyChanging {
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangingEventHandler PropertyChanging;
private string _nameString;
private int _id;
[Column(IsPrimaryKey = true, IsDbGenerated = true, Name = "_id")]
public int NameId {
get {
return _id;
}
set {
if (value != _id) {
OnPropertyChanging("NameId");
_id = value;
OnPropertyChanged("NameId");
}
}
}
[Column(IsPrimaryKey = false, Name = "NAME_TEXT")]
public String NameString {
get {
return _nameString;
}
set {
if (_nameString != value) {
OnPropertyChanging("NameString");
_nameString = value;
OnPropertyChanged("NameString");
}
}
}
}
这里我尝试从数据库中读取数据:
using(var db = new MyDataContext("isostore:/Database/ff.sdf")) {
var allNameItems = db.NameItems.ToArray(); // exception on this line
try {
MessageBox.Show(allNameItems[0].NameString);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
使用此代码我得到 InvalidCastException,但 db.NameItems.Count() 有效。
好的,我读了这个 question 并发现了问题,我在数据库中的 id
字段是 BigInt 而在实体中是 int
。我将其更改为 long
并且有效。