5 votes

Lorsque vous utilisez MySQL, pourquoi Entity Framework 4 essaie-t-il de convertir un long en décimal ?

Chaque fois que j'ai une table avec un BIGINT clé primaire, je peux insérer de nouveaux enregistrements, mais je ne peux pas mettre à jour les enregistrements existants. Lorsque j'essaie d'effectuer une mise à jour, j'obtiens l'erreur suivante :

"The specified value is not an instance of type 'Edm.Decimal'"

Modèle d'échantillon :

public class Model
{
    public long ModelID { get; set; }

    public DateTime ProcessedOn { get; set; }
}

Exemple de code de mise à jour :

public bool SetModelProcessed(long id)
{
    var entity = db.models.SingleOrDefault(m => m.ModelID == id);

    entity.ProcessedOn = DateTime.Now;

    db.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);

    db.SaveChanges();
 }

Même un modèle aussi simple que celui-ci est défaillant pour moi. Quelqu'un sait-il ce qui se passe ?

Editar

J'ai essayé l'approche "code-first". Entity Framework 4.3 n'a même pas pu générer la base de données mySQL, ce qui est apparemment un problème pour mySQL et les versions d'Entity Framework après l'ajout des fonctions de migration.

Depuis la rétrogradation à la version 4.1.10715.0, long travaux, ulong ne l'est toujours pas. EF ne reconnaîtra pas une propriété comme clé primaire s'il s'agit de ulong .

EntityType 'Model' has no key defined. Define the key for this EntityType.

Utilisation de long au lieu de ulong n'est pas ce dont j'ai besoin, mais ça devra faire l'affaire, je suppose.

1voto

Joe Enos Points 17442

S'il s'agit d'un bigint non signé dans la base de données, je pense qu'il sera converti en décimal au lieu d'un long - je ne sais pas pourquoi il n'utilise pas simplement une ulong . Mais je commencerais par là, assurez-vous que votre bigint est signé.

1voto

tom Points 31

Plusieurs années plus tard... Utilisez HasColumnType("long") dans la méthode OnModelCreating() de votre DbContext. Voir Entity Framework Core ne correspond pas à BigInteger

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X