Я пытаюсь создать простую базу данных для использования sqlce в приложении Windows Phone.
У меня есть базовый класс и другой набор классов, которые происходят от него
Вот что я получил
public abstract class EntityBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
private int id;
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
public int EntityId
{
get
{
return id;
}
set
{
if (id != value)
{
id = value;
OnPropertyChanged("Id");
}
}
}
}
[Table]
public class Derived : EntityBase
{
[Column]
public string Description
{
get;
set;
}
}
Тогда у меня есть этот класс для целей datacontext:
public class MyDataContext : DataContext
{
// Specify the connection string as a static, used in main page and app.xaml.
public static string DBConnectionString = "Data Source=isostore:/ToDo.sdf";
// Pass the connection string to the base class.
public MyDataContext(string connectionString)
: base(connectionString)
{ }
public Table<Derived> Deriveds;
}
И, наконец, здесь я пытаюсь создать БД:
private void Application_Launching(object sender, LaunchingEventArgs e)
{
using (MyDataContext db = new MyDataContext(MyDataContext.DBConnectionString))
{
if (db.DatabaseExists() == false)
{
//Create the database -> here's the error
db.CreateDatabase();
}
}
}
Я получаю следующую ошибку при попытке создать базу данных:
Неверный идентификатор столбца. [EntityId]
Да, очень описательное сообщение об ошибке ...
Есть идеи, что не так? Я возился с атрибутами в столбце, но безрезультатно.
[EDIT]: для того, что я тестировал, если я помещаю свойство EntityId в производный класс, оно не вылетает. Это может быть 2 вещи .. одно, что я пропускаю что-то еще в базовом классе, или другое, что атрибут столбца для первичного ключа должен принадлежать классу и не может принадлежать родителю (который было бы крайне ужасным дизайнерским решением, мы не можем использовать наследование ???). если кто-то может подтвердить это, то будет признателен