[英]Creating local database for Windows Phone 8 application
我正在尝试为WP8应用程序创建一个简单的数据库,以存储一些数据。
[Table(Name="LocationDatas")]
public class LocationData
{
public int _locationDataId;
private Nullable<int> _workoutID;
private EntityRef<Workout> _workoutRef = new EntityRef<Workout>();
private int _timestamp;
private double _longitude;
private double _latitude;
private double _altitude;
private double _speed;
[Column(IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)]
public int LocationDataIds
{
get { return _locationDataId; }
set { _locationDataId = value; }
}
[Column(Storage = "_workoutID", DbType = "Int")]
public int? WorkOutId
{
get { return _workoutID; }
set { _workoutID = value; }
}
[Association( Storage = "_workoutRef", ThisKey = "WorkOutId", OtherKey = "LocationDataIds", IsForeignKey = true)]
public Workout Workout
{
get
{
return this._workoutRef.Entity;
}
set
{
this._workoutRef.Entity = value;
if ((value != null))
{
this.WorkOutId = value.WorkOutId;
}
}
}
//...
关联的另一面:
[Table(Name="Workouts")]
public class Workout
{
private int _workOutId;
private EntitySet<LocationData> _locationDataIds = new EntitySet<LocationData>();
private DateTime _date;
private long _duration;
private double _distance;
private double _averageSpeed;
private int _calories;
[Column(IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)]
public int WorkOutId
{
get { return _workOutId; }
set { _workOutId = value; }
}
[Association( Storage = "_locationDataIds", ThisKey = "LocationDataIds", OtherKey = "WorkOutId", IsForeignKey = true)]
public EntitySet<LocationData> LocationDataIds
{
get { return this._locationDataIds; }
set { this._locationDataIds.Assign(value); }
}
//...
这是我的DataContext:
public class SportsTrackerDataContext : DataContext
{
public static string DBConnectionString ="Data Source=isostore:/SportsTracker.sdf";
public SportsTrackerDataContext(string connectionString)
: base(connectionString) { }
public Table<Workout> workouts;
public Table<LocationData> locationdatas;
}
当我尝试创建数据库时,出现一个异常:
using (SportsTrackerDataContext db = new SportsTrackerDataContext(SportsTrackerDataContext.DBConnectionString))
{
if (db.DatabaseExists() == false)
{
//Create the database
db.CreateDatabase(); //exception thrown here
MessageBox.Show("ok");
}
}
例外:
Invalid column ID. [ LocationDataId ]
我以此为参考,但是我看不出代码有什么问题。
另一件事:这是存储此类数据的正确方法,还是我应该尝试其他方法?
我猜Workout
是父表,而LocationData
是子表。
这个想法是,您声明对子表的EntityRef
(对父表的引用)和对父表(具有WorkoutID的LocationData项目集)的EntitySet
。
由于对私有字段和公共财产的名称不了解,因此您在关联中误拼了其中一些。
这就是应该在LocationData类中声明Workout EntityRef关联的方式:
private EntityRef<WorkOut> _workOutRef;
[Association(
Storage = "_workOutRef", ThisKey = "WorkOutID", IsForeignKey = true)]
public WorkOut WorkOut
{
...
}
Storage
指向您的私有EntityRef字段。
ThisKey
指向您的外键公共财产的名称。
IsForeignKey
将WorkOutID设置为外键。
在WorkOut类上,您可以这样声明一个EntitySet:
private EntitySet<LocationData> _locationsData;
[Association(
Storage = "_locationsData", OtherKey = "WorkOutID")]
public EntitySet<LocationData> LocationsData
{
...
}
Storage
指向您的EntitySet私有字段。
OtherKey
指向父表的引用键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.