Question

Procédure pour reproduire l'erreur:

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

personne INSERT INTO (nom, prénom, âge) VALUES ( 'myname', NULL, NULL); SELECT LAST_INSERT_ID () comme newid

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

sortie est "0'

Était-ce utile?

La solution

Ce pas un bug mais une erreur qui est susceptible de se produire si vous modifiez la convention de nommage des colonnes et des tables -> ToPascalCase. Par défaut, un nom colonne / table est copié la façon dont il est défini sur la base de données MySQL. Ce qui rend cette vilaine

original

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 questions importantes au coeur SubSonic après avoir modifié le modèle par défaut pour générer les noms suivants en utilisant la classe inflector de subsonique.

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));

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

//from
GetColumn(key)
//to
GetColumn(Inflector.AddUnderscores(key))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top