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(firstname,lastname,age) VALUES ('myname',NULL,NULL) ;SELECT LAST_INSERT_ID() を 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コアに2つの(〜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 に答える