Как создавать таблицы, когда приложение представлено с пустой и существующей базой данных с Entity Framework 6 - PullRequest
0 голосов
/ 19 февраля 2019

В веб-приложениях на общих хостерах обычный (единственный) способ получить базу данных (здесь: MySQL) - запросить ее у хостера на веб-сайте управления клиентами.Клиент получает новые учетные данные базы данных, у которых нет разрешения на создание, удаление или изменение базы данных, назначенной хостером.

Мне необходимо развернуть веб-службу .NET Framework 4.0 в среде, очень похожей навышеописанный.У меня есть новая база данных, созданная хостером, и учетные данные базы данных, которые имеют разрешения только на создание / изменение / удаление таблиц и вставку / обновление / удаление записей таблиц.

Я понимаю, что обычным способом в Entity Framework 6Развернуть схему - это буквально удалить базу данных, если она уже есть, и создать базу данных и все ее таблицы за один шаг. Однако , этот подход невозможен в среде развертывания, с которой мне приходится сталкиваться.

Я нашел ответы на эту тему, но они очень старые (4 года и старше) и неcover version 6 Entity Framework.

В настоящее время у меня есть следующий код, который будет генерировать исключение из-за того, что таблицы не существуют, потому что (пустая) база данных существовала и "IfNotExists""проверка имеет разрыв в этой оценке.

Imports MySql.Data.MySqlClient
Imports System
Imports System.Collections.Generic


Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

        Try
            Dim connectionString As String = "server=localhost;port=3306;database=ef6mysqltest;uid=ef6mysqltest;pwd=ef6mysqltest"
            Using connection As MySqlConnection = New MySqlConnection(connectionString)
                ' Create database if not exists.
                Using contextDB As EF6.Parking = New EF6.Parking(connection, False)
                    contextDB.Database.CreateIfNotExists()
                End Using
                connection.Open()
                Dim transaction As MySqlTransaction = connection.BeginTransaction
                Try
                    Using context As EF6.Parking = New EF6.Parking(connection, False)
                        context.Database.Log = Sub(ByVal message As String)
                                                   Console.WriteLine(message)
                                               End Sub
                        context.Database.UseTransaction(transaction)
                        Dim cars As List(Of EF6.Car) = New List(Of EF6.Car)
                        cars.Add(New EF6.Car With {
                            .Manufacturer = "Test Manufacturer",
                            .Model = "Test Model",
                            .Year = Date.Now.Year
                        })
                        context.Cars.AddRange(cars)
                        context.SaveChanges()
                    End Using
                    transaction.Commit()
                Catch ex As Exception
                    transaction.Rollback()
                    Console.WriteLine(ex)
                End Try
            End Using
        Catch ex As Exception
            Console.WriteLine(ex)
        End Try

    End Sub

End Class

Код выше и классы базы данных / таблицы взяты из https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html

Теперь мой вопрос: Есть лиспособ развертывания не самой базы данных, а только ее таблиц с помощью Entity Framework версия 6

...