コードファーストエンティティフレームワークを使用してデータベースを作成しようとしていますが、複雑なネストされたオブジェクトでこれがどのように行われるかがわかりません。私は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; }
}
}