0

Procédure pour reproduire l'erreur:subsoniques 3.0.0.4 modèles de disques actifs pour mysql ne pas retourner inséré en dernier id

CREATE TABLE personne ( person_id int (11) NOT NULL AUTO_INCREMENT, prenom varchar (20) NULL DEFAULT, nom varchar (20) DEFAULT NULL, int d'âge (11) DEFAULT '0', la clé primaire (person_id)) MOTEUR = InnoDB AUTO_INCREMENT = 36 DEFAULT CHARSET = latin1

INSERT INTO personne (nom, prénom, âge) VALUES (» myname ', NULL, NULL); SELECT LAST_INSERT_ID() en tant que nouveau

Person personObject = new Person(); 
    personObject.Firstname= "myname"; 
    personObject.Add(); 
    Response.Write(personObject.PersonId); 

la sortie est "0"

+0

Est-ce une question ou un rapport de bogue? –

+0

Je ne sais pas si c'est un bug ou c'est juste moi. –

+0

maintenant je crois que c'est un bug dans le fournisseur mysql de la classe de base subsonique .. :( –

Répondre

0

Ce n'est pas un bogue mais plutôt une erreur qui risque de se produire si vous modifiez la convention de dénomination des colonnes et tables -> ToPascalCase. Par défaut, un nom de colonne/table est copié comme il est défini sur la base de données MySQL. Ce qui rend cette vilaine

originale

person personObject = new person() 
personObject .person_id = 1; 
personObject .first_name = "hello"; 
personObject .Save(); 

Ce que je veux arriver

Person personObject = new Person() 
personObject.PersonId = 1; 
personObject.FirstName = "hello"; 
personObject.Save(); 

Il y aura deux (~ 3, ne me souviens plus) les grandes questions au cœur SubSonic après avoir changé le template par défaut pour générer les noms suivants en utilisant la classe inflector de SubSonic.

réflexion pour les propriétés qui sont nécessaires pour MISES À JOUR/INSERTS doit être modifié exemple:

//from 
item.GetType().GetProperty(tbl.PrimaryKey.Name); 
//to 
item.GetType().GetProperty(Inflector.ToPascalCase(tbl.PrimaryKey.Name)); 

noms de colonnes doivent être retournés à sa propriété d'origine lors des insertions exemple:

//from 
GetColumn(key) 
//to 
GetColumn(Inflector.AddUnderscores(key))