使用具有关系的复杂对象创建实体代码第一数据库

时间:2013-01-27 21:04:54

标签: c# entity-framework nested code-first relationship

我正在尝试使用代码第一实体框架创建一个数据库,并且我不清楚如何使用复杂的嵌套对象。我已经阅读了关于MS和一些博客等的教程,但它们看起来非常简单,我希望有人可以给我一些指导如何正确地做到这一点。

我有一个与网络服务器通信的应用程序。每个设备都注册到服务器中,并且有时会将一些数据从服务器推送到客户端。现在我正在创建一些调查。 每个设备都可以有一些调查问题。每项调查都有一份答案清单。每个答案都应该与它所属的问题以及给出答案的设备配对。

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

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; }
        }
}

0 个答案:

没有答案