Subsónicas 3.0.0.4 plantillas de registro activos para MySQL no regresan Identificación del último registro insertado

StackOverflow https://stackoverflow.com/questions/4342607

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'

¿Fue útil?

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))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top