Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0437: Einfügen und Auslesen von Daten aus DB mit Entity Framework und Code First

 von 

Über den Tipp  

Dieser Tippvorschlag wird übernommen.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Datenbanken und XML
  • Sonstiges

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Entity Framework, SQL Server CE, Code First

Der Vorschlag wurde erstellt am: 02.01.2013 23:01.
Die letzte Aktualisierung erfolgte am 02.01.2013 23:03.

Zurück zur Übersicht

Beschreibung  

Dieses Programmbeispiel schreibt Daten in eine Datenbank,
die durch das EntityFramework in Version 5 nach der CodeFirst-Methode
eigenständig angelegt wird.
Entwickelt wurde es in der Express Edition von Visual Studio 2012 für Desktop

Die Datenbank ist einstellbar. Die vorgesehene Version 4 des
Microsoft SQL Server Compact 4.0 lädt man unter:
http://www.microsoft.com/en-us/download/details.aspx?id=17876

Das EntityFramework 5 installiert man per NuGet im Visual Studio:
http://nuget.org/packages/EntityFramework/5.0.0

Schwierigkeitsgrad

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [19,67 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ---------- Anfang Projektgruppe SQLCompact004.sln ----------
' --------- Anfang Projektdatei SQLCompact004.vbproj ---------
' ----------------- Anfang Datei Context.vb  -----------------
Imports System
Imports System.Data.Entity
Imports System.Data.Common

Namespace MP3Files

    Public Class DateiContext

        Inherits DbContext

        Public Property Dateien As DbSet(Of Datei)

            Public Sub New(connectionString As String, Optional providerInvariantName As _
                String = "System.Data.SqlServerCe.4.0")

                MyBase.New(CreateConnection(connectionString, providerInvariantName), True)

            End Sub

            Private Shared Function CreateConnection(connectionString As String, _
                providerInvariantName As String) As DbConnection

                Dim connection As DbConnection = Nothing

                Dim factory As DbProviderFactory = DbProviderFactories.GetFactory( _
                    providerInvariantName)

                connection = factory.CreateConnection()
                connection.ConnectionString = connectionString

                Return connection

            End Function

            Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)

                ' modelBuilder.Conventions.Remove(Of PluralizingTableNameConvention)()
                modelBuilder.Configurations.Add(New DateiConfiguration())
                MyBase.OnModelCreating(modelBuilder)

            End Sub

        End Class

        Public Class MyDbInitializer

            Inherits CreateDatabaseIfNotExists(Of DateiContext)

            Protected Overrides Sub Seed(context As DateiContext)

                ' create some sample data
            End Sub

        End Class

    End Namespace

    ' ------------------ Ende Datei Context.vb  ------------------
    ' ------------------ Anfang Datei Datei.vb  ------------------
    Imports System
    Imports System.Data.Entity
    Imports System.Data.Common
    Imports System.Data.Entity.ModelConfiguration

    Namespace MP3Files

        Public Class Datei

            Public Property id As Integer
                Public Property pfad As String
                    Public Property name As String
                        Public Property size As Double
                            Public Property md5 As String
                                Public Property datum As DateTime

                                End Class

                                Public Class DateiConfiguration

                                    Inherits EntityTypeConfiguration(Of Datei)

                                    Public Sub New()

                                        Me.ToTable("dateien")

                                        Me.HasKey(Function(datei) datei.id) .Property( _
                                            Function(datei) _
                                            datei.id).HasDatabaseGeneratedOption( _
                                            ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)

                                        Me.Property(Function(datei) datei.pfad).HasMaxLength(255)
                                        Me.Property(Function(datei) datei.md5).HasMaxLength(32)

                                    End Sub

                                End Class

                            End Namespace

                            ' ------------------- Ende Datei Datei.vb  -------------------
                            ' ------------------ Anfang Datei Form1.vb  ------------------
                            Imports SQLCompact004.MP3Files
                            Imports System.Data.SqlServerCe
                            Imports System.Data.Objects
                            Imports System.Data.EntityClient
                            Imports System.Data.Entity
                            Imports System.Data.Entity.Infrastructure
                            Imports System.IO
                            Imports System.Security.Cryptography
                            Imports System.Text

                            Public Class Form1

                                ' Pfad zur DB
                                Private Const strConn As String = "Data Source=d:\DbFile001.sdf"

                                ' Pfad zu MP3-Dateien
                                Private Const strFilePath As String = "E:\MP3\unique"

                                Private oConn As New SqlCeConnectionStringBuilder(strConn)

                                Private Sub Button1_Click(sender As Object, e As EventArgs) _
                                    Handles Button1.Click

                                    Dim strHash As String = Nothing

                                    Using fc As New DateiContext(oConn.ToString(), _
                                        "System.Data.SqlServerCe.4.0")

                                        fc.Database.CreateIfNotExists()

                                        Dim Dir As FileInfo() = New DirectoryInfo( _
                                            strFilePath).GetFiles( "*.mp3", _
                                            SearchOption.AllDirectories)

                                        For Each datei As FileInfo In Dir

                                            Try

                                                strHash = Nothing

                                                Using fstream As FileStream = New FileStream(

                                                    datei.FullName , FileMode.Open , _
                                                        FileAccess.Read , FileShare.Read

                                                    )

                                                    Dim hash() As Byte = New _
                                                        MD5CryptoServiceProvider( _
                                                        ).ComputeHash(fstream)

                                                    Dim sb As New StringBuilder(hash.Length * 2)

                                                    For Each hex As Byte In hash
                                                        sb.Append(hex.ToString("X2"))
                                                    Next

                                                    strHash = sb.ToString

                                                End Using

                                                fc.Dateien.Add(New Datei With {

                                                .datum = datei.LastWriteTime , .pfad = _
                                                    datei.DirectoryName , .name = datei.Name _
                                                    , .md5 = strHash , .size = datei.Length

                                                })

                                            Catch ex As Exception

                                                Debug.Print(ex.Message)

                                            End Try

                                        Next

                                        fc.SaveChanges()

                                    End Using

                                End Sub

                                Public Sub New()

                                    ' Dieser Aufruf ist für den Designer erforderlich.
                                    InitializeComponent()

                                    ' Fügen Sie Initialisierungen nach dem
                                    ' InitializeComponent()-Aufruf hinzu.

                                    Database.SetInitializer(Of DateiContext)(New MyDbInitializer())

                                    ' Database.DefaultConnectionFactory = New
                                    ' SqlCeConnectionFactory("System.Data.SqlServerCe.4.0",
                                    ' "d:\", strConn)

                                End Sub

                                Private Sub Button2_Click(sender As Object, e As EventArgs) _
                                    Handles Button2.Click

                                    Using fc As New DateiContext(oConn.ToString(), _
                                        "System.Data.SqlServerCe.4.0")

                                        fc.Database.CreateIfNotExists()

                                        Try

                                            Dim o = From b In (

                                            From a In fc.Dateien
                                            Group a By Size = a.size, MD5 = a.md5 Into g = Group

                                            Select New With {.size = Size, .md5 = MD5, .anz = _
                                                g.Count()}

                                                )

                                                Join c In fc.Dateien On b.size Equals c.size _
                                                    And b.md5 Equals c.md5

                                                Where b.anz > 1
                                                Order By b.anz Descending

                                                Select New With {.name = c.name, .pfad = _
                                                    c.pfad, .size = c.size, .anz = b.anz}

                                                    For Each s In o
                                                        Debug.Print(s.name)
                                                    Next

                                                Catch ex As Exception

                                                    Debug.Print(ex.Message)

                                                End Try

                                            End Using

                                        End Sub

                                        Private Sub Button3_Click(sender As Object, e As _
                                            EventArgs) Handles Button3.Click

                                            Using fc As New DateiContext(oConn.ToString(), _
                                                "System.Data.SqlServerCe.4.0")

                                                fc.Database.CreateIfNotExists()

                                                Try

                                                    Dim o As DbQuery(Of Datei) = From a In _
                                                        fc.Dateien

                                                    Order By a.pfad, a.name

                                                    Select a

                                                        For Each s In o

                                                            Debug.Print(String.Format( _
                                                                "{0} \ {1} => {2}", New _
                                                                String() {s.pfad, s.name, _
                                                                s.md5}))

                                                        Next

                                                    Catch ex As Exception

                                                        Debug.Print(ex.Message)

                                                    End Try

                                                End Using

                                            End Sub

                                        End Class

                                        ' ------------------- Ende Datei Form1.vb
                                        ' -------------------
                                        ' ---------- Ende Projektdatei SQLCompact004.vbproj
                                        ' ----------
                                        ' ----------- Ende Projektgruppe SQLCompact004.sln
                                        ' -----------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.