是否可以将SQLite.NET与不可变记录类型一起使用?

时间:2015-01-11 17:40:46

标签: c# sqlite immutability sqlite.net

标题说明了。 (很明显,SQLite.NET是托管的here

所有示例都使用可变记录类型,这意味着它们在每个属性定义中都有{ get; set; }。我希望在我的项目中尽可能地删除可变类型,但SQLite.NET看起来像是一个可能的障碍。

如果我尝试使用类型为System.String的1列获取查询结果,则会失败,例如。 那么是否可以使SQLite.NET使用构造函数而不是属性设置器,或者必须使用可变类型在SQLite.NET中检索和存储数据?

1 个答案:

答案 0 :(得分:5)

我不能确定你是否可以使SQLLite使用构造函数而不是属性。那就是说,我非常怀疑它。

使用属性更多更容易,因为您可以使用反射来查找与列名匹配的相应成员。使用构造函数执行此操作将非常痛苦。在这方面,几乎所有其他ORM都以完全相同的方式工作。

如果你真的想使用不可变类型,你需要在ORM周围放置一个包装器,它接受填充的对象并返回一个只有不可变属性的不同的对象。如果您确实想要确保没有人使用可变类型,请将它们设为internal并将它们放在单独的程序集中。

当然,这对于不可变类型来说是一项额外的工作,但考虑到ORM的本质,它几乎是你唯一的选择。