繁体   English   中英

为Windows Phone 8应用程序创建本地数据库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM