Pomelo.entityframeworkcore.mysql: Erreur lors de l'application des migrations : uniqueidentifier, datetime2

Créé le 6 nov. 2019  ·  3Commentaires  ·  Source: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Étapes à reproduire

/***   Guid   ***/
modelBuilder.Entity("EntityFrameworkDataAccess.Entities.Account", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uniqueidentifier");

                    b.Property<Guid>("CustomerId")
                        .HasColumnType("uniqueidentifier");

                    b.HasKey("Id");

                    b.ToTable("Account");
                });

/***   datetime2   ***/
 modelBuilder.Entity("EntityFrameworkDataAccess.Entities.Credit", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uniqueidentifier");

                    b.Property<Guid>("AccountId")
                        .HasColumnType("uniqueidentifier");

                    b.Property<double>("Amount")
                        .HasColumnType("float");

                    b.Property<DateTime>("TransactionDate")
                        .HasColumnType("datetime2");

                    b.HasKey("Id");

                    b.ToTable("Credit");
                });

Le problème

Lorsque j'essaie d'appliquer une création de migration de SQL Server vers MySQL, elle échoue lorsqu'elle modifie le type de colonne de uniqueidentifier (GUID) à char(36)

Exception message:
Stack trace:
MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'uniqueidentifier(36) NOT NULL,

another

MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'datetime2(6) NOT NULL....

Plus de détails techniques

MySQL 5.7.3 :
Système d'exploitation : Windows
Version Pomelo.EntityFrameworkCore.MySql : 3.0.0-rc2.final
Version de l'application Microsoft.AspNetCore. : 3.0.0

closed-question type-question

Commentaire le plus utile

Consultez les deux articles MSDN suivants pour l'utilisation de plusieurs fournisseurs :

De plus, comme vous l'avez compris vous-même, vous pouvez vous rabattre sur l'implémentation de mappage de type par défaut d'un fournisseur en supprimant simplement l'appel HasColumnType() .


J'ai examiné GuidFormat sur les options MySQL ConnectionString, et cela a toujours échoué.

Vous devez utiliser GuidFormat en conjonction avec votre définition de modèle. Mes échantillons précédents devraient fonctionner sans problème. Si ce n'est pas le cas, veuillez publier le code de définition de modèle exact que vous avez essayé et l'option de chaîne de connexion GuidFormat correspondante que vous avez utilisée.

Tous les 3 commentaires

Guide

Votre code:
```c#
b.Propriété("Identifiant de compte")
.HasColumnType("identifiant unique");

MySQL does not support a type named `uniqueidentifier`. But Pomelo *does* supports multiple options to save a `Guid` in a MySQL table.

See `GuidFormat` on the [MySQL ConnectionString Options](https://mysqlconnector.net/connection-options/) page of MySqlConnector (the underlying library we are using).

The default mapping for `System.Guid` is `char(36)`, which will work out-of-the box without explicitly specifying the `GuidFormat`.

Working code:
```c#
b.Property<Guid>("AccountId")
    .HasColumnType("char(36)");

DateHeure

Votre code:
```c#
b.Propriété("Date de la transaction")
.HasColumnType("dateheure2");


MySQL does not support a type named `datetime2`. It supports the follow date/time related data types:
- `time`
- `date`
- `datetime`
- `timestamp`

The closest data type MySQL >= 5.6.4 supports to a MSSQL `datetime2` is `datetime(6)`, which will automatically be chosen for a given `datetime`, if your MySQL version supports it.

Working code:
```c#
b.Property<DateTime>("TransactionDate")
    .HasColumnType("datetime");

Types pris en charge en général

Consultez la documentation MySQL pour tous les types de données pris en charge.

Nous devons prendre en charge les deux moteurs de base de données (SQL Server et MySQL).
J'ai examiné GuidFormat sur les options MySQL ConnectionString, et cela a toujours échoué.

Après avoir comparé Pomelo v2.2.6 avec la dernière version 3.0.0-rc, nous devons supprimer .HasColumnType("uniqueidentifier") et .HasColumnType("datetime2") de Migrations.cs et Migrations.Designer.cs, également le ContextModelSnapshot.cs et ça marche, mais l'idée est d'empêcher la personnalisation des méthodes Up et Down par migration

Consultez les deux articles MSDN suivants pour l'utilisation de plusieurs fournisseurs :

De plus, comme vous l'avez compris vous-même, vous pouvez vous rabattre sur l'implémentation de mappage de type par défaut d'un fournisseur en supprimant simplement l'appel HasColumnType() .


J'ai examiné GuidFormat sur les options MySQL ConnectionString, et cela a toujours échoué.

Vous devez utiliser GuidFormat en conjonction avec votre définition de modèle. Mes échantillons précédents devraient fonctionner sans problème. Si ce n'est pas le cas, veuillez publier le code de définition de modèle exact que vous avez essayé et l'option de chaîne de connexion GuidFormat correspondante que vous avez utilisée.

Cette page vous a été utile?
0 / 5 - 0 notes