ここ数日、私は自分で作成したカスタム データ アクセス レイヤーの代わりに Entity Framework を使用するように、C# で記述された既存のアプリケーションを再構築してきました。特定の POCO に遭遇するまで、すべてが順調に進んでいました。
この POCO には 6 つのプロパティがあり、そのうちの 4 つは基本的なタイプですが、残りの 2 つは他の既存の POCO であるため問題を抱えています。これが問題になる理由は、Entity Framework を使用してデータベースにアクセスしようとすると、Linq to Entity を使用すると正しく機能しないためです。
与えられたエラー: 「コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。」InnerException: "InnerException = {"列名 'Course_CourseId' が無効です。\r\n列名 'Student_StudentId' が無効です。\r\n列名 'Staff_StaffId' が無効です。"}"
私のデータベース構造は次のとおりです。
UniversityCatalog
Table: Courses
-Field: CourseId (Guid)
-Field: CourseName (String)
-Field: CourseNumber (String)
-Field: Comments (String)
-Field: CreditHours (int)
-Field: CourseTypeId (int) (ForeignKey: CourseTypes.CourseTypeId)
Table: CourseTypes
-Field: CourseTypeId (int)
-Field: CourseTypeName (String)
Table: Staffs
-Field: StaffId (Guid)
-Field: FirstName (String)
-Field: LastName (String)
-Field: EmployeeId (int)
Table: Students
-Field: StudentId (Guid)
-Field: FirstName (String)
-Field: LastName (String)
-Field: Grade (String)
Table: CourseOfferings
-Field: CourseOfferingId (Guid)
-Field: CourseId (Guid) (ForeignKey: Courses.CourseId)
-Field: StaffId (Guid) (ForeignKey: Staffs.StaffId)
-Field: Start Time (String)
-Field: End Time (String)
-Field: DayOfWeek (String)
Table: CourseRegistrations
-Field: CourseOfferingId (ForeignKey: CourseOfferings.CourseOfferingId)
-Field: StudentId (ForeignKey: Students.StudentId)
CourseOfferings テーブルの POCO は次のとおりです。
public class CourseOffering
{
public Guid CourseOfferingId { get; set; }
public String DayOfWeek { get; set; }
public String StartTime { get; set; }
public String EndTime { get; set; }
public Course Course { get; set; }
public Student Student { get; set; }
public Staff Staff { get; set; }
}
コンテキスト ファイルでカスタム マッピングを行う必要があると思われますが、何をすればよいかわかりません。ヒントやポインタがあれば、大いに役立ちます! ありがとう!
(これも私のコンテキストファイルです:)
class GatewayContext: DbContext
{
public DbSet<Course> Course { get; set; }
public DbSet<CourseType> CourseTypes { get; set; }
public DbSet<CourseOffering> CourseOfferings { get; set; }
public DbSet<Staff> Staff { get; set; }
public DbSet<Student> Students { get; set; }
}
注: これは、これらのテクノロジを使用して練習するための単なる模擬プロジェクトです。