Tipp-Upload: VB.NET 0437: Einfügen und Auslesen von Daten aus DB mit Entity Framework und Code First
von Bernhard Döbler
Ü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.
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 |
Verwendete API-Aufrufe: |
Download: |
' 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.