[英]Fluent NHibernate: mapping property “Length” ignored when inserting or updating
我们正在尝试(缓慢地)将所有程序从Delphi迁移到C#,这是我们第一次使用ORM进行迁移,因此,如果问题可能很愚蠢,请原谅。 ;-)
我们正在使用:
对于我们的单元测试项目,我定义了实体“ 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:错误[22001] [IBM] CLI0109E Zeichenfolge重新安装。” (德语为“字符串右截断”)。 分配长度小于或等于20个字符的字符串值不会导致异常。
那我想念的是什么? Length属性似乎没有任何功能上的影响。 我以为调用“ Length(20)”将导致ORM在保存时将字符串缩减为20个字符(就像Borlands Delphi在设置数据集中的字段分量的大小时所做的那样)。 : - /
任何提示都欢迎!
亲切的问候
安德烈亚斯
您的假设是不正确的。 NHibernate不会为您截断该字符串,无论如何这都不是一个好主意,因为您正在悄悄地丢失数据。
在映射中设置“长度”将仅设置数据库字段的长度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.