В веб-приложениях на общих хостерах обычный (единственный) способ получить базу данных (здесь: 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