我们正在尝试(慢慢地)将我们所有的程序从 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) 字段。
这是我的单元测试(休眠会话本身是由我们正在设计的包装器类型封装的,所以你不要怀疑):
[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 在设置数据集中字段组件的大小时所做的那样)。:-/
欢迎任何提示!
亲切的问候
安德烈亚斯