重现错误的步骤:
创建表人( 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()as newid
Person personObject = new Person();
personObject.Firstname= "myname";
personObject.Add();
Response.Write(personObject.PersonId);
输出为“0”
答案 0 :(得分: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的变形器类更改默认模板以生成以下名称后,SubSonic核心将会有两个(~3,现在记不起来)主要问题。
必须更改UPDATES / INSERTS所需属性的反射 例如:
//from
item.GetType().GetProperty(tbl.PrimaryKey.Name);
//to
item.GetType().GetProperty(Inflector.ToPascalCase(tbl.PrimaryKey.Name));
执行插入时,列名应返回其原始属性 例如:
//from
GetColumn(key)
//to
GetColumn(Inflector.AddUnderscores(key))