問題を例示するために、AUTOINCREMENT である PK を持つ単純なテーブルがあります。Insert を使用すると、GetLastInsertId は正常に機能します。つまり、挿入された行のキー値を返しますが、InsertParam を使用すると返されません。次に、キー値は 0 です。データベースを見ると、すべて問題ないようです。
インストールされているバージョンはhttps://www.nuget.org/packages/ServiceStack.OrmLite.SqlServer/3.9.56です。
サンプルコード
public class Foo
{
public Foo() {}
[AutoIncrement]
public int Id { get; set; }
public string SomeText { get; set; }
}
挿入 - GetLastInsertId は正しく機能しています
using (IDbConnection db = dbFactory.OpenDbConnection())
{
db.Insert(new Foo { SomeText = "Bla bla" } );
string sql = db.GetLastSql();
// sql = "INSERT INTO \"Foo\" (\"SomeText\") VALUES (N'Bla bla')"
int id = (int)db.GetLastInsertId();
// id = 1
sql = db.GetLastSql();
// sql = SELECT SCOPE_IDENTITY()
}
InsertParam - GetLastInsertId が正しく機能していません (常に 0 !!!)
using (IDbConnection db = dbFactory.OpenDbConnection())
{
db.InsertParam(new Foo { SomeText = "Bla bla" } );
string sql = db.GetLastSql();
// sql = "INSERT INTO \"Foo\" (\"SomeText\") VALUES (@SomeText)"
int id = (int)db.GetLastInsertId();
// id = 0 (always 0)
sql = db.GetLastSql();
// sql = "SELECT SCOPE_IDENTITY()"
}
ORMLite と SQL Server で同じ問題を見た人はいますか?
ORMLite および SQL サーバーとプロジェクト ServiceStack.OrmLite.SqlServerTests のソース コードを表示すると、クラス InsertParam_GetLastInsertId とテスト ケース Can_GetLastInsertedId_using_InsertParam が表示されます。主張するべきだと思いますか?
NUnit を実行してエラーを確認したところ、31 行目に予想されるエラーが表示されました。
ServiceStack.OrmLite.SqlServerTests.
InsertParam_GetLastInsertId.
Can_GetLastInsertedId_using_InsertParam:
with InsertParam
Expected: greater than 0
But was: 0