是否可以将 SQLite.NET 与不可变记录类型一起使用?
Is it possible to use SQLite.NET with immutable record types?
标题如是说。 (要清楚,SQLite.NET 托管 here)
所有示例都使用可变记录类型,这意味着它们在每个 属性 定义中都有 { get; set; }
。我想在我的项目中尽可能摆脱可变类型,但 SQLite.NET 看起来可能是一个障碍。
例如,如果我尝试获取具有 1 列 System.String
类型的查询结果,它会失败。
那么是否可以让 SQLite.NET 使用构造函数而不是 属性 设置器,或者我 必须 使用可变类型在 SQLite.NET 中检索和存储数据?
我不能确定您是否可以让 SQLLite 使用构造函数而不是属性。这么说,我很怀疑。
使用属性容易得多,因为您可以使用反射来查找与列名称匹配的适当成员。使用构造函数执行此操作会 非常 痛苦。在这一点上,几乎所有其他 ORM 都以完全相同的方式工作。
如果你真的想使用不可变类型,你需要在 ORM 周围放置一个包装器,它接受填充的对象和 returns 一个 不同的 对象只有不可变的属性。如果您真的 想确保没有人使用可变类型,请将它们internal
放在一个单独的程序集中。
诚然,这只是针对不可变类型的大量额外工作,但考虑到 ORM 的性质,这几乎是您唯一的选择。
标题如是说。 (要清楚,SQLite.NET 托管 here)
所有示例都使用可变记录类型,这意味着它们在每个 属性 定义中都有 { get; set; }
。我想在我的项目中尽可能摆脱可变类型,但 SQLite.NET 看起来可能是一个障碍。
例如,如果我尝试获取具有 1 列 System.String
类型的查询结果,它会失败。
那么是否可以让 SQLite.NET 使用构造函数而不是 属性 设置器,或者我 必须 使用可变类型在 SQLite.NET 中检索和存储数据?
我不能确定您是否可以让 SQLLite 使用构造函数而不是属性。这么说,我很怀疑。
使用属性容易得多,因为您可以使用反射来查找与列名称匹配的适当成员。使用构造函数执行此操作会 非常 痛苦。在这一点上,几乎所有其他 ORM 都以完全相同的方式工作。
如果你真的想使用不可变类型,你需要在 ORM 周围放置一个包装器,它接受填充的对象和 returns 一个 不同的 对象只有不可变的属性。如果您真的 想确保没有人使用可变类型,请将它们internal
放在一个单独的程序集中。
诚然,这只是针对不可变类型的大量额外工作,但考虑到 ORM 的性质,这几乎是您唯一的选择。