Не удается подключиться к базе данных mysql с использованием структуры объекта - PullRequest
0 голосов
/ 22 сентября 2019

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

Шаги, которые я выполнил:

  1. Добавить модель данных сущности ADO.NET ивыберите Mysql, введите правильные данные, протестируйте соединение и затем выберите нужную таблицу базы данных
  2. Visual Studio создала файл с именем «DatabaseContext» и файл для каждой выбранной таблицы.

DatabaseContext:

    namespace TranscoopTrips.Database
    {
        using System.Data.Entity;

        public partial class DatabaseContext : DbContext
        {
             public DatabaseContext()
             : base("name=Database1")
             {
             }

    public virtual DbSet<address> addresses { get; set; }
    public virtual DbSet<driver> drivers { get; set; }
    public virtual DbSet<journey> journeys { get; set; }
    public virtual DbSet<vehicle> vehicles { get; set; }
    public virtual DbSet<expeditionpoint> expeditionpoints { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<address>()
            .Property(e => e.name)
            .IsUnicode(false);

        modelBuilder.Entity<address>()
            .HasMany(e => e.expeditionpoints)
            .WithOptional(e => e.address)
            .HasForeignKey(e => e.fk_address)
            .WillCascadeOnDelete();

        modelBuilder.Entity<driver>()
            .Property(e => e.name)
            .IsUnicode(false);

        modelBuilder.Entity<driver>()
            .Property(e => e.surname)
            .IsUnicode(false);

        modelBuilder.Entity<driver>()
            .HasMany(e => e.journeys)
            .WithRequired(e => e.driver)
            .HasForeignKey(e => e.fk_driver);

        modelBuilder.Entity<journey>()
            .Property(e => e.measureunit)
            .IsUnicode(false);

        modelBuilder.Entity<journey>()
            .Property(e => e.customer)
            .IsUnicode(false);

        modelBuilder.Entity<journey>()
            .HasMany(e => e.expeditionpoints)
            .WithOptional(e => e.journey)
            .HasForeignKey(e => e.fk_journey)
            .WillCascadeOnDelete();

        modelBuilder.Entity<vehicle>()
            .Property(e => e.plate)
            .IsUnicode(false);

        modelBuilder.Entity<vehicle>()
            .HasMany(e => e.journeys)
            .WithRequired(e => e.vehicle)
            .HasForeignKey(e => e.fk_vehicle);
        }
      }
    }

Пример класса, сгенерированного автоматически:

namespace TranscoopTrips.Database
{
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

[Table("transcooptrips.driver")]
public partial class driver
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public driver()
    {
        journeys = new HashSet<journey>();
    }

    [Column(TypeName = "text")]
    [Required]
    [StringLength(65535)]
    public string name { get; set; }

    [Column(TypeName = "text")]
    [Required]
    [StringLength(65535)]
    public string surname { get; set; }

    public int id { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<journey> journeys { get; set; }
}
}

Попытка подключения к базе данных в основной программе

    using (var db = new DatabaseContext())
    {

        Console.Write(db.Database.Connection.State); //return always "Closed"
        Console.WriteLine();
    }

4: Строка подключения, созданная Visual Studio

<connectionStrings>
    <add name="Database1" connectionString="server=localhost;user id=root;password=asdasdasd;persistsecurityinfo=True;database=transcooptrips" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

DatabaseContext Connection string inside config file Code used to prove that can't connect Files automatically created by Visual Studio

Выход Console.Write(db.Database.Connection.State); всегда "Закрыт".

Что я сделал не так?

Ответы [ 2 ]

2 голосов
/ 22 сентября 2019

Это с другого форума, у кого-то была такая же проблема, и это было решением для него:

Установить пакет Nuget:

Install-Package EntityFramework Install-Package MySql.Data.Entity -Версия 6.9.9 Установка MySQL для Visual Studio 1.2.6 - https://dev.mysql.com/downloads/windows/visualstudio/

Изменения в Web.Config

<EntityFramework>

в:

<EntityFramework codeConfigurationType = "MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">

Добавить (** ваша информация **):

<connectionStrings>
<add name="**YourContextName**" connectionString="server=**xxx.xxx.xxx.xxx**;port=3306;user id=**your user**;password=**your password**;database=**your database**" providerName="MySql.Data.MySqlClient" /></connectionStrings>

Перезапустите Visual Studio

Мои настройки: - Сообщество Microsoft Visual Studio 2015 - Dot Net Framework 4.5.2 - Asp.Net MVC 5.2.3.0 -MySql Server 5.6

0 голосов
/ 22 сентября 2019

Подсказка:

  1. Проверьте, запущены ли ваши службы sql.

  2. Проверьте, правильно ли указано имя базы данных- кажется, что ваше реальное имя базы данных - "transcooptrips", и вы передали "name = Database1" в базовый класс.Наиболее предпочтительным способом определения таких констант является файл appsettings.json.

    открытый частичный класс DatabaseContext: DbContext {public DatabaseContext (): base ("name = Database1") {}

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