【问题标题】:Servicestack: Handle indexes, auto increment etc without attributes?Servicestack:处理索引、自动增量等没有属性?
【发布时间】:2013-11-10 00:09:06
【问题描述】:

我正在测试OrmLite,我正在研究如何处理创建的表中的索引。

如果您想将某物标记为索引、唯一性、自动增量等,我发现的唯一方法是通过属性,如下所示:

Index(Unique = true)] // Creates Unique Index
public string Email { get; set; }

但是,OrmLite/ServiceStack 声明:

  • 按照约定将 POCO 类 1:1 映射到 RDBMS 表,无需任何属性。

因此我希望有其他方法可以在不使用属性的情况下定义这些东西?具有类定义的库应与 OrmLite 完全分离。

这可行吗?


编辑:

扩展方法 AddAttributes 似乎由于某种原因不起作用:

【问题讨论】:

    标签: c# mysql ormlite-servicestack


    【解决方案1】:

    按照惯例,意味着 OrmLite 将按照预期从模型中推断模式。但是,如果您想添加任何自定义项,例如在任意字段上添加索引,则需要告诉 OrmLite 相关信息。由于 OrmLite 是代码优先的 ORM,因此属性是如何为模型装饰附加功能。

    在下一个 OrmLite v4 中,您将能够通过在启动时动态添加这些属性来添加与 POCO 分离的属性,例如:

    typeof(Poco).GetProperty("Email")
        .AddAttributes(new IndexAttribute { Unique = true });
    

    这将与使用[Index(Unique = true)] 装饰您的财产具有相同的效果

    【讨论】:

    • 好的,所以在 v 4 可用之前,第一点并不完全正确。那里有发布日期的信息吗?
    • @Ted v4 评估目前为available on MyGet,将于本月底在 NuGet 上公开发布。
    • @Ted 这是recent status update。这个 API 单元测试显示了很多 what the API looks like in v4。我们将在 v4-beta 版本发布后处理文档。
    • 再次感谢您的快速回答。再打扰你(或其他人);它似乎不适用于 AddAttributes,PropertyInfo 不存在该方法(GetProperty 返回)。这应该如何工作?
    • @Ted 最常见的扩展方法在ServiceStack 命名空间中。如果你有 ReSharper,它会让你知道它在哪里,并为你自动引用命名空间。
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多