有可能不使用数据注释属性ServiceStack OrmLite吗?

时间:2013-06-23 19:50:19

标签: data-annotations ormlite-servicestack

我正在尝试探索ServiceStack.OrmLite的功能,并且无法理解是否可以使用bootstrap类进行配置(外键,数据类型,列索引,别名等)?我不想在我的实体类上使用数据注释属性。即使使用某种配置也会比属性更好。那是因为我希望将来有机会更换ORM。也许存在用于流畅配置的第三方库?

2 个答案:

答案 0 :(得分:6)

ServiceStack.OrmLite没有流畅的映射。我同样不愿意从模型定义中引用DataAnnotations程序集。我喜欢我的POCO干净整洁:在他们自己的组装中分开,不参考任何第三方组件。这不是一种美学,而是一种扭曲我的手臂的方式,以避免做出破坏良好设计的短手的诱惑。我喜欢 - 如果它不是一个干净的ORM,它只是一个紧密耦合的DAL,然后无论如何它都是无用的。

无论如何 - 你可以在bootstrapping / impl中明确地注释你的POCO类。一种地方 - 它非常明显:使用反射并在运行时添加属性,例如

typeof (User).GetProperty("Id")
    .AddAttributes(new AutoIncrementAttribute());

OrmLite的任何属性的相同原则(以及任何属性,真的)。

我在OrmLite的单元测试中找到了提示,实际上有一个Can_add_AutoIncrement_Id_at_runtime()单元测试。尽管这基本上是对.NET核心进行单元测试,而不是真正的OrmLite。无论如何,谢谢,通过测试人员。

答案 1 :(得分:2)

ServiceStack OrmLite基于代码优先的POCO创建模式。如果您希望OrmLite为您创建表,则添加属性可以方便地更改sql生成的表模式。如果您不想使用属性,则在带外手动创建数据库中的SQL模式,或者在创建表后删除属性。

或者使用另一个ORM,OrmLite永远不会支持存储在运行时配置文件中的映射 - 这违反了它的代码优先理念。