Шаблоны активных записей Subsonic 3.0.0.4 для MySQL не возвращают последний вставленный идентификатор

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

Вопрос

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

Создать таблицу Person (person_id int (11) не null auto_increment, firstname varchar (20) null по умолчанию, lastname varchar (20) по умолчанию Null, возраст int (11) по умолчанию '0', первичный ключ (Person_id) ingine = innodb auto_increment = 36 по умолчанию charset = latin1

Вставьте в личность (FirstName, Lastname, Age) Values ​​('myName', null, nul

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

вывод: «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();

После изменения шаблона по умолчанию для генерации следующих имен с использованием класса инфлектора SubSonic возникнут две (~3, сейчас не помню) основные проблемы с ядром 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))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top