Subsónicas 3.0.0.4 plantillas de registro activos para MySQL no regresan Identificación del último registro insertado
-
30-09-2019 - |
Pregunta
Pasos para reproducir el error:
CREAR TABLA persona ( person_id int (11) NOT NULL AUTO_INCREMENT, varchar bloque (20) DEFAULT NULL, varchar apellido (20) NULL DEFAULT, int edad (11) DEFAULT '0', PRIMARY KEY (person_id)) ENGINE = InnoDB AUTO_INCREMENT = 36 DEFAULT CHARSET = latin1
INSERT INTO persona (nombre, apellido, edad) VALORES ( 'myname', NULL, NULL); SELECT LAST_INSERT_ID () como newid
Person personObject = new Person();
personObject.Firstname= "myname";
personObject.Add();
Response.Write(personObject.PersonId);
salida es "0'
Solución
Esto no es un error, sino más bien un error que es probable que ocurra si cambia la convención de nombres de columnas y tablas -> ToPascalCase. Por defecto un nombre de columna / tabla se copia la forma en que se define en la base de datos MySQL. Cual hace que esta fea
ORIGINAL
person personObject = new person()
personObject .person_id = 1;
personObject .first_name = "hello";
personObject .Save();
Lo que me gusta que suceda
Person personObject = new Person()
personObject.PersonId = 1;
personObject.FirstName = "hello";
personObject.Save();
Habrá dos (~ 3, no recuerdo ahora) los principales problemas al núcleo SubSonic después de cambiar la plantilla predeterminada para generar los siguientes nombres usando la clase de inflector SubSonic.
reflexión para las características que se requieren para las actualizaciones / Inserción debe ser cambiado ejemplo:
//from
item.GetType().GetProperty(tbl.PrimaryKey.Name);
//to
item.GetType().GetProperty(Inflector.ToPascalCase(tbl.PrimaryKey.Name));
nombres de columna deben ser devueltos a su propiedad original cuando se hacen inserciones ejemplo:
//from
GetColumn(key)
//to
GetColumn(Inflector.AddUnderscores(key))