0

最近、MVC 4 と Entity Framework を使用して Web アプリを作成しています。次に示すように、私のデータベース「ppProject」モデルではうまくいっています。

Public Class ppProject
    <Key()>
    Public Property ProjectID As Integer
    Public Property ClientID As Integer
    Public Property ProjectTitle As String

    Public Overridable Property Client As ppClient
    Public Overridable Property Milestones As ICollection(Of ppMilestone)
    Public Overridable Property Tasks As ICollection(Of ppTask)
End Class

問題は、従業員の新しいテーブル「ppEmployees」を追加していることです。このようにして、Project は、Employees テーブルへの外部キーである ProjectManager を持つことができます。これらは、ProjectManagerID (外部キー) が EmployeeID (主キー) にリンクされている新しいモデルです。

Public Class ppProject
    <Key()>
    Public Property ProjectID As Integer
    Public Property ClientID As Integer
    Public Property ProjectTitle As String
    Public Property ProjectManagerID As Integer   'NEW'

    Public Overridable Property Client As ppClient
    Public Overridable Property Milestones As ICollection(Of ppMilestone)
    Public Overridable Property Tasks As ICollection(Of ppTask)
    Public Overridable Property ProjectManager As ppEmployee   'NEW'
End Class

Public Class ppEmployee
    <Key()>
    Public Property EmployeeID As Integer
    Public Property DepartmentID As Integer
    Public Property FirstName As String
    Public Property LastName As String

    Public Overridable Property ProjectsInManagement As ICollection(Of ppProject)
    Public Overridable Property TimeItems As ICollection(Of ppTimeItem)
    Public Overridable Property Department As ppDepartment
End Class

プロジェクト モデルを変更して従業員モデルを追加すると、エラーが発生します

無効な列名 'ProjectManager_EmployeeID'

これをトリガーしているコード行は、次のビューでプロジェクトに最初にアクセスしたときです。

@For Each proj In client.Projects

これを引き起こしている原因についてのアイデアはありますか? これは命名規則の問題か単純なものに違いありません。なぜなら、これまで他のテーブル モデルでエラーが発生したことがないからです。

編集 -以下の私の答えを見てください。ここでEntity Frameworkが何をしているのかについて非常に混乱しています。

4

3 に答える 3

1

Entity Framework では、フィールドの名前は列の名前と一致する必要があります。

そうしないと、回答で行ったように列属性でプロパティを装飾しない限り、EFはフィールドをマップする方法を知りません。

于 2013-12-12T00:57:07.563 に答える