4

次のデータベースがあります。

ここに画像の説明を入力

このデータベースから EDMX モデルを作成しました。

Diagnosisテーブルをダイアグラムに追加するまで、すべてがうまく機能していました。

以下のクエリでエラーが発生し始めました。

var appointments = from a in db.Appointment.Include("Patient")
                   where a.DoctorID == doctorId
                   select a;

次のエラーが発生し始めました。

列名 'DiagnosisID' が無効です。

デバッグ モードで、生成された DB クエリを確認したところ、次のようになりました。

SELECT 
  [Extent1].[ID] AS [ID], 
  [Extent1].[DoctorID] AS [DoctorID], 
  [Extent1].[PatientID] AS [PatientID], 
  [Extent1].[DiagnosisID] AS [DiagnosisID], 
  [Extent1].[Date] AS [Date], 
  [Extent1].[Time] AS [Time], 
  [Extent1].[Duration] AS [Duration], 
  [Extent1].[Notes] AS [Notes], 
  [Extent2].[ID] AS [ID1], 
  [Extent2].[ContactDetailID] AS [ContactDetailID], 
  [Extent2].[FirstName] AS [FirstName], 
  [Extent2].[LastName] AS [LastName], 
  [Extent2].[Sex] AS [Sex], 
  [Extent2].[BirthDate] AS [BirthDate], 
  [Extent2].[CurrentDate] AS [CurrentDate], 
  [Extent2].[Notes] AS [Notes1]
FROM  [dbo].[Appointment] AS [Extent1]
LEFT OUTER JOIN [dbo].[Patient] AS [Extent2] ON [Extent1].[PatientID] = [Extent2].[ID]
WHERE (([Extent1].[DoctorID] = @p__linq__0) AND ( NOT ([Extent1].[DoctorID] IS NULL OR @p__linq__0 IS NULL))) OR (([Extent1].[DoctorID] IS NULL) AND (@p__linq__0 IS NULL))

/*
Int32 p__linq__0 = 1
*/

私のデザインに何か問題がありますか?

以下は、予約テーブルのデザインです。

ここに画像の説明を入力

Appointment テーブルの FK 定義は次のとおりです。

ここに画像の説明を入力

以下のように、列挙可能なオブジェクトのToList()メソッドを呼び出すと、例外が発生します。

ここに画像の説明を入力

EF によって生成されるクラスは次のとおりです。


public partial class Appointment
    {
        public int ID { get; set; }
        public Nullable<int> DoctorID { get; set; }
        public Nullable<int> PatientID { get; set; }
        public Nullable<int> DiagnosisID { get; set; }
        public Nullable<System.DateTime> Date { get; set; }
        public Nullable<System.DateTime> Time { get; set; }
        public Nullable<byte> Duration { get; set; }
        public string Notes { get; set; }

        public virtual Diagnosis Diagnosis { get; set; }
        public virtual Doctor Doctor { get; set; }
        public virtual Patient Patient { get; set; }
    }

public partial class Diagnosis
    {
        public Diagnosis()
        {
            this.Appointment = new HashSet<Appointment>();
        }

        public int ID { get; set; }
        public string Symptoms { get; set; }
        public string Treatment { get; set; }
        public Nullable<System.DateTime> CurrentDate { get; set; }
        public string Notes { get; set; }

        public virtual ICollection<Appointment> Appointment { get; set; }
    }

EDMX で生成されたクラスは次のとおりです。

ここに画像の説明を入力

4

1 に答える 1