Entity Framework

 [Home]

Entity Framework の概要

Entity Framework は ADO.NET の一部をなす技術でデータ指向ソフトウェアをサポートするフレームワークである。Entity Framework を使用すると、RDB の構造を意識せずにデータを自然に扱うことができる。


Visual Studio 2012 におけるサンプル

Entity Framework (EF) はまだ発展途上で Visual Studio のバージョンにより EF のバージョンも異なり、その利用方法も異なる可能性がある。ここでのサンプルは、Visual Studio 2012 でのものである。


サンプルの概要

このサンプルはコンソールアプリケーションで EF を使用する例で、SQL Server の "test1" というテーブルに CRUD を行うものである。

このテーブルは次のような単純な構造を持つ。

フィールド n: 整数型、主キー
フィールド str:文字列型

コマンド引数は次の通りである。


プロジェクトの作成

Visual Studio 2012 Express Edition で Visual Basic を選び、コンソールアプリケーションを作成する。次に、ソリューションエクスプロらでプロジェクトを選び、コンテキストメニュー「追加/新しい項目」でデータモデルを追加する。


「データベースから生成」を選ぶ。


データベースを選ぶ。


最後にテーブルを選んで完了ボタンをクリックするとモデルが追加される。


 

サンプルコード

Module Module1
    ''' <summary>
    ''' Main
    ''' </summary>
    ''' <param name="Args">操作コマンド</param>
    ''' <remarks>Entity Framework のテスト。テスト対象: test1 テーブル。</remarks>
    Sub Main(ByVal Args As String())
        If Args.Length = 0 Then
            Console.WriteLine("S Select" & vbCrLf & "I Insert" & vbCrLf & "D Delete" & vbCrLf & "U Update")
            Exit Sub
        End If

        Dim sw As String = Args(0).Substring(0, 1).ToUpper()
        Select Case sw
            Case "S"  ' Select
                SelectTest()
            Case "I"  ' Insert n str
                If Args.Length < 3 Then
                    Console.WriteLine("Few parameters")
                Else
                    InsertTest(Args(1), Args(2))
                    Console.WriteLine("Insert OK")
                End If
            Case "D"  ' Delete n
                If Args.Length < 2 Then
                    Console.WriteLine("Few parameters")
                Else
                    DeleteTest(Args(1))
                    Console.WriteLine("Delete OK")
                End If
            Case "U"  ' Update n str
                If Args.Length < 3 Then
                    Console.WriteLine("Few parameters")
                Else
                    UpdateTest(Args(1), Args(2))
                    Console.WriteLine("Update OK")
                End If
            Case Else
                Console.WriteLine("Bad operation")
        End Select
#If DEBUG Then
        Console.ReadKey()
#End If
    End Sub


    ''' <summary>
    ''' Select
    ''' </summary>
    ''' <remarks>test1 テーブルの内容を表示する。testEntities は接続文字列の名前に相当。</remarks>
    Sub SelectTest()
        Dim ent = (New testEntities()).test1
        Dim rows = From row In ent Select New With {row.n, row.str}
        For Each row In rows
            Console.WriteLine(row.n.ToString() & ", " & row.str)
        Next
    End Sub

    ''' <summary>
    ''' Insert n str
    ''' </summary>
    ''' <param name="n">キー (Int32)</param>
    ''' <param name="str">文字列</param>
    ''' <remarks>test1 テーブルにデータ (n, str) を追加する。</remarks>
    Sub InsertTest(ByVal n As String, ByVal str As String)
        Dim ent = New testEntities()
        Dim table = ent.test1
        Dim data = New test1()
        data.n = n
        data.str = str
        table.Add(data)
        ent.SaveChanges()
    End Sub

    ''' <summary>
    ''' Delete n
    ''' </summary>
    ''' <param name="n">削除するキー (Int32)</param>
    ''' <remarks>キー n で指定したデータを削除する。</remarks>
    Sub DeleteTest(ByVal n As String)
        Dim ent = New testEntities()
        Dim table = ent.test1
        Dim key As Integer = CInt(n)
        Dim theRow = table.Find(key)
        table.Remove(theRow)
        ent.SaveChanges()
    End Sub

    ''' <summary>
    ''' Update n str
    ''' </summary>
    ''' <param name="n">更新するデータのキー (test1.n)</param>
    ''' <param name="str">文字列 (test1.str)</param>
    ''' <remarks>キー n のデータを更新する。</remarks>
    Sub UpdateTest(ByVal n As String, ByVal str As String)
        Dim ent = New testEntities()
        Dim table = ent.test1
        Dim key As Integer = CInt(n)
        Dim theRow = table.Find(key)
        theRow.str = str
        ent.SaveChanges()
    End Sub
End Module