Setting string to be sql type of “varchar” instead of “nvarchar”

前端 未结 4 2069
醉酒成梦
醉酒成梦 2020-12-18 22:10

I have the following mapping:

public class LogEntryMap
{
    public LogEntryMap()
    {
        Map.Id(x => x.Id).GeneratedBy.Identity();
        Map(x =&         


        
相关标签:
4条回答
  • 2020-12-18 22:36

    Use .CustomType("AnsiString") instead of default "String" and NHibernate will use varchar instead of nvarchar.

    0 讨论(0)
  • 2020-12-18 22:38

    If you wanted all of your strings to be mapped to varchar instead of nvarchar you could consider using a convention:

    /// <summary>
    /// Ensures that all of our strings are stored as varchar instead of nvarchar.
    /// </summary>
    public class OurStringPropertyConvention : IPropertyConvention
    {
        public void Apply(IPropertyInstance instance)
        {
            if (instance.Property.PropertyType == typeof (string))
                instance.CustomType("AnsiString");
        }
    }
    

    You mappings could then go back to a simple mapping:

    Map(x => x.Context);
    

    Just make sure you remember to tell Fluent NH to use the convention:

            var configuration = new Configuration();
            configuration.Configure();
            Fluently
                .Configure(configuration)
                .Mappings(m => m.FluentMappings
                    .AddFromAssemblyOf<Widget>()
                    .Conventions.Add<OurStringPropertyConvention>()
                    )
                .BuildSessionFactory();
    
    0 讨论(0)
  • 2020-12-18 22:42

    Doh.

    Map(x => x.Context).CustomSqlType("varchar (512)");
    
    create table OV_SAC.dbo.[LogEntry] (
        Id BIGINT IDENTITY NOT NULL,
       Context varchar (512) null,
       primary key (Id)
    )
    
    0 讨论(0)
  • 2020-12-18 22:47

    We found using the "CustomType("AnsiString")" option does prevent it from using the nvarchar, however, it sets the field length of 8000 for a column that is specified as varchar(30). The 8000 varchar is much faster than 4000 nvarchar, but it is still causing huge problems with sql server overhead.

    0 讨论(0)
提交回复
热议问题