0

ステップIDを挿入しました(20)DEFAULTのNULL、年齢INT(11)DEFAULT '0'、PRIMARY KEY(PERSON_ID))ENGINE = InnoDBのAUTO_INCREMENT = 36 DEFAULT CHARSET = LATIN1亜音速3.0.0.4アクティブなレコード・テンプレートは、エラーを再現するために

人(FIRSTNAME、LASTNAME、年齢) VALUES(」INTO INSERT myname '、NULL、NULL); newidとしてのLAST_INSERT_ID()の選択

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

出力が "0"

+0

はこれです質問やバグレポート? –

+0

これはバグか私だけか分かりません。 –

+0

今私はこれがサブソニックコアクラスのmysqlプロバイダのバグだと信じています。:( –

答えて

0

これはバグではなく、列と表のToPascalCaseの命名規則を変更すると発生する可能性のあるエラーです。デフォルトでは、カラム/テーブル名はMySQLデータベースに定義されている方法でコピーされます。これは変更した後、亜音速のコアに2(〜3、今覚えていないことができます)大きな問題があります私は

Person personObject = new Person() 
personObject.PersonId = 1; 
personObject.FirstName = "hello"; 
personObject.Save(); 

が起こるのが好きこの醜い

オリジナル

person personObject = new person() 
personObject .person_id = 1; 
personObject .first_name = "hello"; 
personObject .Save(); 

を作りますSubSonicのインフレクタクラスを使用して以下の名前を生成するデフォルトテンプレート。更新のために必要とされる性質のため

反射/インサートは、 例を変更する必要があります:挿入 例を行う際

//from 
item.GetType().GetProperty(tbl.PrimaryKey.Name); 
//to 
item.GetType().GetProperty(Inflector.ToPascalCase(tbl.PrimaryKey.Name)); 

列名を元のプロパティに返されるべきである:

//from 
GetColumn(key) 
//to 
GetColumn(Inflector.AddUnderscores(key))