用于 mysql 的 Subsonic 3.0.0.4 活动记录模板不返回最后插入的 id
Posted
技术标签:
【中文标题】用于 mysql 的 Subsonic 3.0.0.4 活动记录模板不返回最后插入的 id【英文标题】:Subsonic 3.0.0.4 active record templates for mysql not returning last inserted id 【发布时间】:2011-05-19 13:28:24 【问题描述】:重现错误的步骤:
创建表人 ( 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=拉丁语1
插入人(名字,姓氏,年龄) VALUES ('myname',NULL,NULL) ;SELECT LAST_INSERT_ID() as newid
Person personObject = new Person();
personObject.Firstname= "myname";
personObject.Add();
Response.Write(personObject.PersonId);
输出为“0”
【问题讨论】:
这是一个问题还是错误报告? 我不知道这是一个错误还是只是我。 现在我相信这是亚音速核心类的 mysql 提供程序中的一个错误.. :( 【参考方案1】:如果您更改列和表的命名约定 -> 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))
【讨论】:
以上是关于用于 mysql 的 Subsonic 3.0.0.4 活动记录模板不返回最后插入的 id的主要内容,如果未能解决你的问题,请参考以下文章