servicestack.ormlite:索引的自定义命名可以在代码中完成吗?

mw3dktmi  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(356)

(im运行servicestack或MLite 5.1.1)
我碰巧有几个对象有一个长名称,现在在设置表时创建一个长名称的表。当ormlite尝试在一列上创建索引时,失败的原因是:
无法创建表co\U bookingrecurring\U recurringbookingadministrationgroup(类型tworks.alfa.alfacommons.bookingrecurring.recurringbookingadministrationgroup):标识符名称“idx\U co\U bookingrecurring\U recurringbookingadministrationgroup\U deleted”太长
所以,我希望 IndexAttribute 还将包含一个构造函数,因此我可以更改它,而不是 idx_deleted ,但我没有找到这样的构造函数或其他方法来处理它。
我找到了inamingstrategy接口和一些示例,但它们似乎不能处理索引名。
有没有办法处理这个问题,这样我就可以正常使用createtable了?

rkkpypqq

rkkpypqq1#

方案a:避免长的用户定义名称:“recurringbookingadministrationgroup”
方案b:(或者可能是ormlite的错):不要在表中任何内容的名称中包含表名(“bookRecurrence”?)(除了“id”)。
方案c:找人修理奥姆利特。修复的一种方法是截断长名称并附加一个固定长度的哈希值,该哈希值应该是过长的名称。
计划d:向bugs.mysql.com提交一份bug报告,抱怨名称限制。
方案e:查看MySQL8.0;它可能有一些增加的限制;不知道他们是否在这里申请。
(同时,我将把这一点添加到我的一长串清单中,说明为什么第三方软件不仅能提供帮助,还能“妨碍”用户。)

irtuqstp

irtuqstp2#

我在此提交中添加了对自定义索引名称的支持,这将允许您提供一个自定义索引名称来代替基于约定的索引名称,例如:

public class Table
{
    [Index(Name = "idx_custom_name")]
    public string Name { get; set; }
}

此更改可从myget上的v5.1.1中获得。

相关问题