C# NHibernate:使用byte[]属性验证架构

C# NHibernate:使用byte[]属性验证架构,c#,mysql,nhibernate,fluent-nhibernate,C#,Mysql,Nhibernate,Fluent Nhibernate,我需要验证模式,其中我有一个具有byte[]属性(BLOB)的对象。当我运行验证时,我收到OverflowException:“值对于Int32来说太大或太小。” 我将NHibernate 3.1.0.400与FluentNHibernate 1.2.0.712一起使用 我已经创建了测试项目来检查这一点。以下是代码(在验证时会掉落): static void Main(字符串[]args) { var configuration=new NHibernate.Cfg.configuration(

我需要验证模式,其中我有一个具有byte[]属性(BLOB)的对象。当我运行验证时,我收到OverflowException:“值对于Int32来说太大或太小。”

我将NHibernate 3.1.0.400与FluentNHibernate 1.2.0.712一起使用 我已经创建了测试项目来检查这一点。以下是代码(在验证时会掉落):

static void Main(字符串[]args)
{
var configuration=new NHibernate.Cfg.configuration();
string connectionString=“某些连接字符串”;
WriteLine(“使用连接字符串运行测试:{0}”,connectionString);
字典道具=新字典()
{
{“connection.provider”、“NHibernate.connection.DriverConnectionProvider”},
{“connection.driver_class”,“NHibernate.driver.MySqlDataDriver”},
{“connection.connection_string”,connectionString},
{“方言”,“NHibernate.dialogue.mysql5dialogue”},
};
配置。添加属性(道具);
var mappings=fluntly.Configure(配置)
.Mappings(m=>m
.FluentMappings.AddFromAssemblyOf()的
.Conventions.AddFromAssemblyOf());
var sessionFactory=映射
.ExposeConfiguration(DoExtendedConfiguration)
.BuildSessionFactory();
}
专用静态void DoExtendedConfiguration(配置)
{
SchemaExport SchemaExport=new SchemaExport(配置).SetDelimiter(“;”).SetOutputFile(“schema.sql”);
schemaExport.Create(false,true);
SchemaValidator SchemaValidator=新SchemaValidator(配置);
schemaValidator.Validate();
}
公共类数据资源
{
公共int Id{get;set;}
公共字节[]值{get;set;}
}
公共类DataResourceMap:ClassMap
{
公共DataResourceMap()
{
Id(x=>x.Id);
Map(x=>x.Value);
}
}

我没有在官方网站上发现任何关于此类漏洞的内容,但在我将FluentNhibernate和Nhibernate更新到最新版本(通过Nuget)后,问题得到了解决。这很适合我,所以我将结束这个问题,就像没有人找到任何其他解决方案一样,stack允许我这样做。

在MS SQL中工作正常,它创建了一个VARBINARY(8000)列。您可以尝试显式设置值字段的大长度,如中所示
static void Main(string[] args)
    {
        var configuration = new NHibernate.Cfg.Configuration();

        string connectionString = "some connection string";
        Console.WriteLine("Running test with connection string: {0}", connectionString);
        Dictionary<string, string> props = new Dictionary<string, string>()
                                               {
                                                   {"connection.provider", "NHibernate.Connection.DriverConnectionProvider"},
                                                   {"connection.driver_class", "NHibernate.Driver.MySqlDataDriver"},
                                                   {"connection.connection_string", connectionString},
                                                   {"dialect", "NHibernate.Dialect.MySQL5Dialect"},
                                               };
        configuration.AddProperties(props);
        var mappings = Fluently.Configure(configuration)
            .Mappings(m => m
                               .FluentMappings.AddFromAssemblyOf<DataResource>()
                               .Conventions.AddFromAssemblyOf<DataResource>());

        var sessionFactory = mappings
               .ExposeConfiguration(DoExtendedConfiguration)
               .BuildSessionFactory();
    }

    private static void DoExtendedConfiguration(Configuration configuration)
    {
        SchemaExport schemaExport = new SchemaExport(configuration).SetDelimiter(";").SetOutputFile("schema.sql");
        schemaExport.Create(false, true);

        SchemaValidator schemaValidator = new SchemaValidator(configuration);
        schemaValidator.Validate();
    }

 public class DataResource
{
    public int Id { get; set; }
    public byte[] Value { get; set; }
}
public class DataResourceMap : ClassMap<DataResource>
{
    public DataResourceMap()
    {
        Id(x => x.Id);
        Map(x => x.Value);
    }
}