Объектно-реляционное сопоставление (ORM) между базой данных MySQL и объектами c # в Visual Studio с использованием LINQ - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь установить ORM между базой данных MySQL и объектами c # в Visual Studio

Я установил следующие пакеты для добавления базы данных MySQL в список источников данных:

, следуя рекомендациям в этом посте: Как подключиться к источнику данных MySQL в Visual Studio

Я создал источник данных, и мой код выглядит следующим образом ...

Строка подключения в app.config:

  <connectionStrings>
    <add name="MyMapper.Properties.Settings.myConnectionString" connectionString="server=my-db-instance.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com;user id=my_user_id;password=my_user_password;persistsecurityinfo=True;database=my_database" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

DataContext в MyDataContext.cs:

namespace MyMapper
{
   [Database]
   public class MyDataContext : DataContext
   {
      public MyDataContext() : base(Properties.Settings.Default.myConnectionString) { }
      public Table<ElementId> ElementIds;
   }
}

Сопоставленный класс в ElementId.cs:

namespace MyMapper
{
   [Table(Name = "ElementId")]
   public class ElementId
   {
      [Column(Name = "IntegerValue", IsPrimaryKey = true)]
      public int IntegerValue { get; set; }
   }
}

Операция вставки в MyController.cs:

ElementId my_element_id = new ElementId();
my_element_id.IntegerValue(88);

using (MyDataContext my_data_context = new MyDataContext())
{
   my_data_context.ElementIds.InsertOnSubmit(my_element_id);
   my_data_context.SubmitChanges();
}

При выполнении SubmitChanges () выдается следующее исключение:

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server

Похоже, проблема в связи с базой данных

Обновление в ответ на предлагаемое решение в Почему я получаю сообщение «Не удается подключиться к серверу - ошибка, связанная с сетью или экземпляром»? : Я не пытаюсь подключиться к SqlConnection, но к MySqlConnection

1 Ответ

0 голосов
/ 20 июня 2019

Соединение контекста данных не было MySqlConnection

namespace MyMapper
{
   [Database]
   public class MyDataContext : DataContext
   {
      public MyDataContext() : base(new MySqlConnection(Properties.Settings.Default.myConnectionString)) { }
      public Table<ElementId> ElementIds;
   }
}

, но теперь выдается следующее исключение:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[ElementId]([IntegerValue])
VALUES (88)' at line 1

похоже, что запрос не форматируется как MySQL

ОБНОВЛЕНИЕ: Для поддержки MySQL требуются пакеты NuGet:

Я использовал MySQL.Data и Entity Framework 6 (EF6): https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html

Причина выбора EF6 заключается в том, что EF Core поддерживает тип для типа (https://entityframework.net/tpt) на момент написания этого ответа (https://github.com/aspnet/EntityFrameworkCore/issues/2266)

DataContext в MyDataContext.cs:

namespace MyMapper
{
   [DbConfigurationType(typeof(MySqlEFConfiguration))]
   public class MyDataContext : DbContext
   {
      public DbSet<BaseClass> BaseClass{ get; set; }
      public DbSet<ElementId> ElementId { get; set; }

      public MyDataContext () : base(new MySqlConnection(Properties.Settings.Default.myConnectionString).ConnectionString) { }

      protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
      {
         dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); // to avoid pluralization of the tables

         // EntityTypeConfiguration<T>
         dbModelBuilder.Configurations.Add(new BaseClassConfiguration());
         dbModelBuilder.Configurations.Add(new ElementIdConfiguration());

      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...