/*** 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");
});
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....
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
Votre code:
```c#
b.Propriété
.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)");
Votre code:
```c#
b.Propriété
.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");
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.
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()
.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 connexionGuidFormat
correspondante que vous avez utilisée.