0

重现错误的步骤:

CREATE TABLE person ( 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 默认字符集=latin1

INSERT INTO person(firstname,lastname,age) VALUES ('myname',NULL,NULL) ;SELECT LAST_INSERT_ID() as newid

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

输出为“0”

4

1 回答 1

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))
于 2010-12-07T16:01:56.390 回答