Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以将SQLite.NET与不可变的记录类型一起使用?_C#_Sqlite_Immutability_Sqlite.net - Fatal编程技术网

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

C# 是否可以将SQLite.NET与不可变的记录类型一起使用?,c#,sqlite,immutability,sqlite.net,C#,Sqlite,Immutability,Sqlite.net,标题说明了这一点。(需要说明的是,SQLite.NET是托管的) 所有示例都使用可变记录类型,这意味着它们在每个属性定义中都有{get;set;}。我想在我的项目中尽可能地消除可变类型,但是SQLite.NET看起来可能是一个障碍 例如,如果我试图获取一个包含1列类型为System.String的查询结果,它就会失败。 那么,有没有可能让SQLite.NET使用构造函数而不是属性设置器,或者我必须使用可变类型来检索和存储SQLite.NET中的数据?我不能确定是否可以让SQLLite使用构造函数

标题说明了这一点。(需要说明的是,SQLite.NET是托管的)

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

例如,如果我试图获取一个包含1列类型为
System.String
的查询结果,它就会失败。
那么,有没有可能让SQLite.NET使用构造函数而不是属性设置器,或者我必须使用可变类型来检索和存储SQLite.NET中的数据?

我不能确定是否可以让SQLLite使用构造函数而不是属性。尽管如此,我还是非常怀疑

使用属性要容易得多,因为可以使用反射查找与列名匹配的适当成员。用构造器做这件事会非常痛苦。在这一点上,几乎所有其他ORM的工作方式都完全相同

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

诚然,这对于不可变类型来说是一个很大的额外工作,但考虑到ORMs的性质,这几乎是您唯一的选择