0

我正在尝试使用代码优先实体框架创建数据库,但不清楚如何使用复杂的嵌套对象完成此操作。我已经阅读了有关 MS 和一些博客等的教程,但它们看起来非常简单,希望有人能给我一些关于如何正确执行此操作的指示。

我有一个与 Web 服务器通信的应用程序。每个设备都在服务器中注册,并且不时地从服务器向客户端推送/拉取一些数据。现在我正在创建一些调查。每个设备都可以有一些被询问的调查问题。每个调查都有一个他们给出的答案列表。每个答案都应与其所属的问题以及给出该答案的设备配对。

所以这里有一些部分代码。请建议正确的方法来创建我需要的关系以及最佳推荐实践中的类结构。

public class Device
    {
        public virtual int Id { get; set; }
        [Required]
        public virtual string Udid { set; get; }
        public virtual string Contact { set; get; }
        public virtual DateTime EnrollDate { get; set; }
        public virtual List<SurveyQuestion> Surveys { get; set; } 
    }

public class SurveyQuestion
    {
        public virtual int Id { set; get; }
        public virtual string Question { get; set; }
        public virtual List<Answer> Answers { get; set; }
        public virtual DateTime Time { get; set; }
    }

public class Answer
    {
        public virtual int Id { get; set; }
        public virtual string UserAnswer { get; set; }
        public virtual DateTime Time { get; set; }
        public virtual SurveyQuestion SurveyQuestion { get; set; }
        public virtual Device DeviceWhichAnswered {get; set;}
    }

数据源的抽象

public interface IDataSource
    {
        IQueryable<Device> Devices { get; }
        IQueryable<SurveyQuestion> SurveyQuestions { get; }
        IQueryable<Answer> Answers { get; }
        void Save();
    }

以及实现实体 db 的具体类

public class MyDb : DbContext, IDataSource
    {
        public MyDb() : base("DefaultConnection")
        {
            Debug.Write(Database.Connection.ConnectionString);
        }
        public DbSet<Device> Devices { get; set; }
        public DbSet<SurveyQuestion> SurveyQuestions { get; set; }
        public DbSet<Answer> Answers { get; set; }
        IQueryable<Device> IDataSource.Devices
        {
            get { return Devices; }
        }
        IQueryable<SurveyQuestion> IDataSource.SurveyQuestions
        {
            get { return SurveyQuestions; }
        }
        IQueryable<Answer> IDataSource.Answers
        {
            get { return Answers; }
        }
}
4

0 回答 0