代码之家  ›  专栏  ›  技术社区  ›  Ted

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

  •  2
  • Ted  · 技术社区  · 6 年前

    (Im正在运行ServiceStack或MLite 5.1.1)

    我碰巧有几个对象有一个长名称,现在在设置表时创建它会创建一个长名称的表。当OrmLite尝试在一列上创建索引时,它失败,原因是:

    无法创建表co_bookingRequired_RecurringBookingAdministrationGroup(键入tWorks.Alfa.AlfaCommons.bookingRequired.RecurringBookingAdministrationGroup):标识符名称“idx_co_bookingRequired_RecurringBookingAdministrationGroup_deleted”太长

    所以,我希望 IndexAttribute 也会包含一个构造函数,所以我可以更改它 idx_deleted ,但我没有找到这样的构造函数或其他方法来处理它。

    我找到了 INamingStrategy 接口和 some examples ,但它们似乎不处理索引名。

    有没有办法处理这个问题,以便我可以正常使用CreateTable?

    2 回复  |  直到 6 年前
        1
  •  2
  •   mythz    6 年前

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

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

    此更改可从v5.1.1获得,现在 available on MyGet .

        2
  •  0
  •   Rick James    6 年前

    A计划:避免长的用户定义名称:“RecurringBookingAdministrationGroup”

    方案B:(或者可能是OrmLite的错):不包括表名(“bookRequired”?)以表中任何东西的名义(可能除了“id”)。

    C计划:找人修理奥姆利特。一种修复方法是截断长名称并附加一个固定长度的哈希值,该哈希值应该是很长的名称。

    D计划:向bugs.mysql.com提交一个错误报告,抱怨名称限制。

    E计划:看看MySQL8.0;它可能有一些增加的限制;不知道它们是否适用于这里。

    (同时,我将把这个添加到我的长列表中,为什么第三方软件可以“碍事”而不仅仅是帮助。)