如何控制NServiceBus生成数据表的数据库架构(VARCHAR长度)
修改NServiceBus中NHibernate映射的字符串列长度
默认NServiceBus依赖NHibernate的ConventionModelMapper生成数据库表结构,字符串属性默认映射为NVARCHAR(255)。要修改这个默认长度,无需手动修改数据库,有几种更优雅的实现方式:
方法一:自定义NHibernate约定
通过创建自定义字符串约定,覆盖默认的255长度限制:
using FluentNHibernate.Conventions; using FluentNHibernate.Conventions.Instances; public class CustomStringLengthConvention : IPropertyConvention { public void Apply(IPropertyInstance instance) { // 为所有字符串属性设置默认长度,也可针对特定属性单独调整 if (instance.Property.PropertyType == typeof(string)) { instance.Length(1000); // 可选:针对特定属性名设置专属长度 if (instance.Name == "DetailedDescription") { instance.Length(4000); } } } }
随后在NServiceBus的NHibernate配置中注册该约定:
var persistence = endpointConfiguration.UsePersistence<NHibernatePersistence>(); persistence.ConnectionString("YourConnectionString"); persistence.UseConventions(c => { c.Add<CustomStringLengthConvention>(); });
方法二:显式映射特定属性
若仅需修改个别字符串属性的长度,可使用显式映射配置:
public class YourMessageMap : ClassMap<YourMessage> { public YourMessageMap() { Map(x => x.LongContent).Length(4000); Map(x => x.ShortTitle).Length(500); } }
将该映射类放在项目可访问目录下,NHibernate会自动扫描加载。
方法三:修改NHibernate全局配置
若需要统一调整所有字符串属性的默认长度,可修改NHibernate全局配置参数:
var persistence = endpointConfiguration.UsePersistence<NHibernatePersistence>(); persistence.ConnectionString("YourConnectionString"); persistence.ConfigureNHibernate(cfg => { // 设置全局默认字符串长度为1000 cfg.SetProperty("hibernate.connection.default_string_length", "1000"); });
内容的提问来源于stack exchange,提问作者Mrks83
相关产品推荐
相关产品推荐

