C# NHibernate:使用byte[]属性验证架构
我需要验证模式,其中我有一个具有byte[]属性(BLOB)的对象。当我运行验证时,我收到OverflowException:“值对于Int32来说太大或太小。” 我将NHibernate 3.1.0.400与FluentNHibernate 1.2.0.712一起使用 我已经创建了测试项目来检查这一点。以下是代码(在验证时会掉落):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(
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);
}
}