Unterschall- 3.0.0.4 aktive Datensatz Vorlagen für mysql nicht zuletzt eingefügte ID Rückkehr
-
30-09-2019 - |
Frage
Schritte zum Reproduzieren Fehler:
TABLE Person CREATE ( person_id int (11) NOT NULL AUTO_INCREMENT, Vorname VARCHAR (20) DEFAULT NULL, Nachname VARCHAR (20) DEFAULT NULL, Alter int (11) DEFAULT '0', PRIMARY KEY (person_id)) ENGINE = InnoDB AUTO_INCREMENT = 36 Standard-Zeichensatz = latin1
INSERT INTO Person (Vorname, Nachname, Alter) VALUES ( 'myname', NULL, NULL); SELECT LAST_INSERT_ID () als newid
Person personObject = new Person();
personObject.Firstname= "myname";
personObject.Add();
Response.Write(personObject.PersonId);
Ausgang "0'
Lösung
Dies ist kein Fehler, sondern ein Fehler, der wahrscheinlich passieren, wenn Sie die Namenskonvention von Spalten und Tabellen ändern -> ToPascalCase. Standardmäßig wird eine Spalte / Tabellenname so, wie es ist definiert auf der MySQL-Datenbank kopiert. Das macht diesen hässlichen
Original
person personObject = new person()
personObject .person_id = 1;
personObject .first_name = "hello";
personObject .Save();
Was Ich mag passieren
Person personObject = new Person()
personObject.PersonId = 1;
personObject.FirstName = "hello";
personObject.Save();
Es wird zwei wichtige Fragen zu dem SubSonic Kern (~ 3 kann jetzt nicht mehr erinnern) die Standardvorlage nach dem Ändern der folgenden Namen SubSonic die Inflector Klasse zu erzeugen.
Reflexion für Eigenschaften, die für updates / inserts erforderlich sind, muss geändert werden Beispiel:
//from
item.GetType().GetProperty(tbl.PrimaryKey.Name);
//to
item.GetType().GetProperty(Inflector.ToPascalCase(tbl.PrimaryKey.Name));
Spaltennamen sollten in seine ursprüngliche Eigenschaft zurückgegeben werden, wenn Einsätze tun Beispiel:
//from
GetColumn(key)
//to
GetColumn(Inflector.AddUnderscores(key))