1
我正在使用OrmLite for MySql(來自nuget),並且有一些對象會持續導致內容被序列化和blobbed。我發現這些字段的模式默認爲varchar(255),僅適用於小塊。即使相對較小的列表對於255個字符也太大。ServiceStack MySQL中的ORMLite blobbed列
使用OrmLite時,確保blob表大小正確的最佳方法是什麼?
例子:
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; }
}
}
瞭解重新varchar數據類型,問題的目的是爲了設置大小上限的最佳方法,它缺省爲varchar(255)爲沒有註釋的blobbed類型。手動上漿似乎是要走的路,但想看看是否有更好的或替代的選擇。 – Steve
添加上面的單元測試示例來說明 – Steve