首页 文章

用于mysql的Subsonic 3.0.0.4活动记录模板不返回最后插入的id

提问于
浏览
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 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”

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的inflector类更改默认模板以生成以下名称后,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))
    

相关问题