Действия по воспроизведению ошибки:
CREATE TABLE человек ( person_id int (11) NOT NULL AUTO_INCREMENT, firstname varchar (20) DEFAULT NULL, lastname varchar (20) DEFAULT NULL, age int (11) DEFAULT '0', PRIMARY KEY (person_id)) ENGINE = InnoDB AUTO_INCREMENT = 36 DEFAULT CHARSET = latin1
INSERT INTO person (имя, фамилия, возраст) VALUES ('myname', NULL, NULL), SELECT LAST_INSERT_ID() как новый
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();
После изменения шаблона по умолчанию для создания следующих имен с использованием класса Inflector 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))