1

すべてのプログラムを Delphi から C# に (ゆっくりと) 移行しようとしていますが、ORM を使用するのはこれが初めてです。;-)

私たちは使用しています:

  • DB2 バージョン 9.7.5
  • FluentNHibernate バージョン 1.3.0.0
  • NHibernate バージョン 3.3.1.4000

単体テスト プロジェクトでは、エンティティ "TestCSharp" を定義しました。この型には、「TextVar」という名前の文字列プロパティがあります。マッピングは次のとおりです。

public class TestCsharpMapping:ClassMap<TestCsharp>
{
  /// <summary> 
  /// map constructor
  /// </summary>
  public TestCsharpMapping()     
  {
     Schema("TEST");
     Table("TEST_CSHARP");
     base.Id(x => x.Id).Column("ID").GeneratedBy.Sequence("ID_SEQUENCE");
     Map(x => x.TextVar).Column("TEXT_VAR").Nullable().Length(20);
  }

}

テーブル TEST.TEST_CSHARP は Linux DB2 データベースにあり、フィールド TEXT_VAR は VARCHAR(20) フィールドです。

これは私の単体テストです (hibernate セッション自体は、私たちが設計しているラッパー タイプによってカプセル化されているので、気にしないでください):

  [TestMethod]
  public void TestEditTextFields()
  {
     ReInitSession();
     CleanUp();
     var testobjects = _dataProviderSession.LoadAll<TestCsharp>(QueryDuration.ShortQuery);
     testobjects.Add( new TestCsharp());
     // overflow : Text_Var is only 20 chars long
     testobjects[0].TextVar = "01234567890123456789A";
     _dataProviderSession.Save();
     testobjects = _dataProviderSession.LoadAll<TestCsharp>(QueryDuration.ShortQuery);
     Assert.AreEqual(1, testobjects.Count);
     Assert.AreEqual("01234567890123456789", testobjects[0].TextVar);
  }

Save() コマンドで単体テストが失敗し、DB2 エラー「IBM.Data.DB2.DB2Exception: ERROR [22001] [IBM] CLI0109E Zeichenfolge rechts abgeschnitten.」が表示されます。(これはドイツ語で「文字列の右側が切り捨てられた」という意味です)。長さが 20 文字以下の文字列値を割り当てても、例外はありません。

それで、私が見逃しているのは何ですか?Length プロパティには、機能的な影響はないようです。「Length(20)」を呼び出すと、保存時に ORM が文字列を 20 文字に削減すると想定していました (データセット内のフィールド コンポーネントのサイズを設定するときに Borlands Delphi が行ったように)。:-/

どんなヒントでも大歓迎です!

敬具

アンドレアス

4

1 に答える 1