Я использую OrmLite для MySql (из nuget) и имею некоторые объекты, которые я сохраняю, что приведет к сериализации и размытию содержимого. Я нахожу, что схема для этих полей по умолчанию используется varchar (255), которая работает только для небольших капель. Даже относительно небольшие списки слишком велики для 255 символов.ServiceStack ORMLite blobbed столбцы в MySQL
Каков наилучший подход к обеспечению правильного размера таблиц blob при использовании OrmLite?
Пример:
public class Foo : IHasId<long>
{
[AutoIncrement]
public long Id { get; set; }
public Dictionary<string, string> TestSize { get; set; }
}
Подход, который я везу сейчас пояснением [StringLength(6000)]
для каждого blobbed поля. Хотя это работает, я не уверен, есть ли лучший способ обеспечить достаточное пространство.
Ниже приведен полный тестовый модуль, который иллюстрирует проблему проклейки:
using NUnit.Framework;
using ServiceStack.DataAnnotations;
using ServiceStack.DesignPatterns.Model;
using ServiceStack.OrmLite;
using ServiceStack.OrmLite.MySql;
using System;
using System.Collections.Generic;
using System.Configuration;
namespace OrmLiteTestNamespace
{
[TestFixture]
public class BlobItemTest
{
[Test]
public void TableFieldSizeTest()
{
var dbFactory = new OrmLiteConnectionFactory(
ConfigurationManager.AppSettings["mysqlTestConn"],
MySqlDialectProvider.Instance);
using (var db = dbFactory.OpenDbConnection())
{
db.CreateTableIfNotExists<Foo>();
var foo1 = new Foo()
{
TestSize = new Dictionary<string, string>()
};
// fill the dictionary with 300 things
for (var i = 0; i < 300; i++)
{
foo1.TestSize.Add(i.ToString(), Guid.NewGuid().ToString());
}
// throws MySql exception "Data too long for column 'TestSize' at row 1"
db.Insert(foo1);
}
}
}
public class Foo : IHasId<long>
{
[AutoIncrement]
public long Id { get; set; }
public Dictionary<string, string> TestSize { get; set; }
}
}
Подразумеваемый тип данных var varar, вопрос должен был касаться наилучшего подхода к установке верхнего предела размера, по умолчанию используется varchar (255) для blobbed типов без аннотаций. Кажется, что ручная калибровка - это путь, но хотелось бы увидеть, есть ли лучшие или альтернативные варианты. – Steve
Добавлен пример тестового примера выше, чтобы проиллюстрировать – Steve