4

I have the next mapping, where I specify the length of some string fields:

public ResolutionMap()
{
  Schema("dbo");
  Table("Resolution");
  Id(x => x.IdResolution, "resolution_id").UnsavedValue(0).GeneratedBy.Identity();
  Component(x => x.Store, m =>
    {
      m.Map(y => y.StoreCodeId, "store_code_id");
      m.Map(y => y.StoreCode, "store_code").Length(10);
    }
  );
  Map(x => x.ResolutionData, "resolution_data").Length(42);
}

However, when I watch the update query executed at the SQL Server Profiler, I see that the length set on the mapping is not respected at all on the parameter declaration:

exec sp_executesql
  N'UPDATE dbo.Resolution SET resolution_data = @p0, store_code_id = @p1, store_code = @p2 WHERE resolution_id = @p3',
  N'@p0 nvarchar(4000),@p1 int,@p2 nvarchar(4000),@p3 int',
  @p0=N'Test',@p1=89,@p2=N'ST000003',@p3=275

Why could this be happening? I need to set the length because this slows the update process.

I am currently using Fluent NHibernate 1.3.0.733 and NHibernate 3.3.1 over .NET Framework 3.5.

DocMax
  • 12,094
  • 7
  • 44
  • 44
Guillermo GutiƩrrez
  • 17,273
  • 17
  • 89
  • 116

1 Answers1

4

Apparently, Length(x) is only used if you are generating the database schema from the mappings.

NHibernate won't let you save a property to a column where truncation is involved, an exception will be raised.

"String or binary data would be truncated. The statement has been terminated."

What are the underlying types of the strings? Are the strings always the same length or do they vary? varchar(x) for example.

You can specify the lengths for example with:

Map(x => x.StoreCode).CustomSqlType("varchar (512)"); etc.

Or can create a convention to set the default string length:

public class DefaultStringLengthConvention: IPropertyConvention
{
  public void Apply(IPropertyInstance instance)
  {
    instance.Length(250);
  }
}

For more information, see:

Override for fluent NHibernate for long text strings nvarchar(MAX) not nvarchar(255)

http://marcinobel.com/index.php/fluent-nhibernate-conventions-examples/ - StringColumnLengthConvention

https://github.com/jagregory/fluent-nhibernate/wiki/Auto-mapping

https://github.com/jagregory/fluent-nhibernate/wiki/Conventions

Community
  • 1
  • 1
Luke Hutton
  • 10,612
  • 6
  • 33
  • 58