Subsonic 3.0.0.4 активные шаблоны записей для mysql не возвращают последний вставленный идентификатор - PullRequest
0 голосов
/ 03 декабря 2010

Действия по воспроизведению ошибки:

CREATE TABLE person ( person_id int (11) NOT NULL AUTO_INCREMENT, имя varchar (20) DEFAULT NULL, фамилия varchar (20) DEFAULT NULL, возраст int (11) DEFAULT '0', первичный ключ (person_id)) ENGINE = InnoDB AUTO_INCREMENT = 36 DEFAULT CHARS latin1

INSERT INTO person (имя, фамилия, возраст) VALUES ('myname', NULL, NULL); ВЫБЕРИТЕ LAST_INSERT_ID () как newid

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

вывод "0"

1 Ответ

0 голосов
/ 07 декабря 2010

Это не ошибка, а скорее ошибка, которая может произойти, если вы измените соглашение об именах столбцов и таблиц -> 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, не помню сейчас) основные проблемы с ядром SubSonic после изменения шаблона по умолчанию для создания следующих имен с использованием класса инфлектора 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))
...