0

Действия для воспроизведения ошибки:Дозвуковые 3.0.0.4 активные записи шаблонов для MySQL не возвращает последний добавленный идентификатор

CREATE TABLE человек ( person_id INT (11) NOT NULL AUTO_INCREMENT, ПгвЬЫате VARCHAR (20) DEFAULT NULL, фамилия VARCHAR (20) По умолчанию значение NULL, возраст INT (11) По умолчанию '0', первичный ключ (person_id)) ДВИГАТЕЛЬ = InnoDB AUTO_INCREMENT = 36 По умолчанию CHARSET = latin1

INSERT INTO человека (имя, фамилия, возраст) ЗНАЧЕНИЯ (» myname ', NULL, NULL); SELECT LAST_INSERT_ID() как newid

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

output is «0»

+0

Это вопрос или сообщение об ошибке? – 2010-12-03 05:05:29

ответ

0

Это не ошибка, а скорее ошибка, которая может произойти, если вы измените соглашение об именах столбцов и таблиц -> ToPascalCase. По умолчанию имя столбца/таблицы копируется так, как оно определено в базе данных MySQL. Что делает этот уродливый

Оригинал

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

То, что я люблю бывать

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

Там будет два (~ 3, не помню сейчас) основные вопросы дозвуковой ядра после изменения шаблон по умолчанию для генерации следующих имен с использованием класса Inflector SubSonic.

отражения свойств, которые необходимы для обновления/Вставки должны быть изменены пример:

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

имена столбцов должны быть возвращены в первоначальное имущество при выполнении вставок пример:

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