1

これらのクラスを EF Code-First で使用して、DB にデータを追加しようとしています。オブジェクトにデータを入力し、コンテキスト「dbContext.Tracks.Add(t1)」にデータを入力しようとした後。「タイプ 'System.Collections.Generic.HashSet`1[Vinyl7]' のオブジェクトをタイプ 'Vinyl7' にキャストできません」というエラーが表示されます。

Public Class Vinyl7

    <Key>
    Public Overridable Property mediaId As Long
    Public Overridable Property parentMediaId As System.Nullable(Of Long)
    Public Overridable Property side As String

    <ForeignKey("mediaId"), Required>
    Public Overridable Property track As Track

End Class


Public Class Track

    <Key>
    Public Property mediaId As Long
    Public Property title As String

    Public Overridable Property Vinyl7T As ICollection(Of Vinyl7) = New HashSet(Of Vinyl7)
End Class

これが私のコンテキストです

Public Class MediaRepo : Inherits DbContext

    Public Sub New()
        MyBase.New("name=MediaDB")

    End Sub

    Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)

    End Sub

    Public Property Vinyl7s As DbSet(Of Vinyl7)
    Public Property Tracks As DbSet(Of Track)

End Class

これが私のメソッドです。

        Using db = New MediaRepo
            Dim t1 = New Track
            t1.title = "Kutchie"
            Dim t2 = New Track
            t2.title = "Drug Trade"

            Dim a = New Media.Vinyl7
            a.side = "A"
            a.parentMediaId = t1.mediaId
            a.track = t1
            Dim b = New Media.Vinyl7
            b.side = "B"
            b.parentMediaId = t1.mediaId
            b.track = t2
            t1.Vinyl7T.Add(a)
            t1.Vinyl7T.Add(b)
            db.Tracks.Add(t1)

            SaveChanges(db)

        End Using
4

1 に答える 1

0

あなたの注釈は間違っていると思います。mediaIdへの外部キーとして参照していますが、それはエンティティTrackの主キーです。Vinyl7おそらくそうparentMediaIdですよね?

Vinyl7これでエンティティを更新すると、機能します。

   <Key>
    Public Overridable Property mediaId As Long       
    Public Overridable Property side As String

    <ForeignKey("mediaId"), Required>
    Public Overridable Property track As Track

編集

あなたのコメントに従って、私は 1..0 対 1 の関係に更新しました。

動作する簡単なテスト アプリを作成しました。それをあなたが持っているものと比較できますか? 多分あなたはEFを混乱させる何か余分なものを持っていますか?

 Public Class Vinyl7

    <Key>
    Public Overridable Property mediaId As Long
    Public Overridable Property side As String

    <ForeignKey("mediaId"), Required>
    Public Overridable Property track As Track

End Class

Public Class Track
    <Key>
    Public Property trackid As Long
    Public Property title As String

    Public Overridable Property Vinyl7T As Vinyl7

End Class

Module Module1

    Public Class MediaRepo : Inherits DbContext

        Public Sub New()
        End Sub

        Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
        End Sub

        Public Property Vinyl7s As DbSet(Of Vinyl7)
        Public Property Tracks As DbSet(Of Track)

    End Class

    Sub Main()
        Dim db As New MediaRepo

        Dim vin = New Vinyl7
        Dim track As New Track

        track.Vinyl7T = vin

        db.Tracks.Add(track)
        db.SaveChanges()

    End Sub

End Module
于 2013-03-07T03:54:29.717 に答える