4

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

4

2 回答 2

7

ServiceStack.OrmLite 没有流畅的映射。我和你一样不愿意从我的模型定义中引用 DataAnnotations 程序集。我喜欢我的 POCO 的干净,就像完全干净一样:在他们自己的程序集中分开,不参考任何第 3 方程序集。这与其说是一种美学,不如说是一种扭曲我的手臂以避免诱惑去做破坏好的设计的短手的东西。我想 - 如果它不是一个干净的 ORM,它只是一个紧密耦合的 DAL,然后这一切都是徒劳的。

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

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

OrmLite 的任何属性(实际上是任何属性)的原理相同。

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

于 2013-12-09T01:22:55.417 回答
2

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

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

于 2013-06-23T20:00:13.117 回答