Sqlite 转换数据对象-F#、Fableus、sql net pcl和web API客户端库

Sqlite 转换数据对象-F#、Fableus、sql net pcl和web API客户端库,sqlite,xamarin.forms,f#,c#-to-f#,Sqlite,Xamarin.forms,F#,C# To F#,我对F#非常陌生,我试图找出在相似但不同的数据对象之间进行转换的最佳方法,同时尽量减少代码重复。我正在为Xamarin表单编写一个应用程序,它使用了令人难以置信的F#MVU框架 我正在使用sqlite net pcl进行数据持久化,它在创建数据库表并与该表交互时调用一个对象,我创建了一个AuthorObject: 键入AuthorObject()= []//sqlite net pcl属性 成员val AuthorId=0,带有get,set 成员val Username=”“,带有get,se

我对F#非常陌生,我试图找出在相似但不同的数据对象之间进行转换的最佳方法,同时尽量减少代码重复。我正在为Xamarin表单编写一个应用程序,它使用了令人难以置信的F#MVU框架

我正在使用sqlite net pcl进行数据持久化,它在创建数据库表并与该表交互时调用一个对象,我创建了一个
AuthorObject

键入AuthorObject()=
[]//sqlite net pcl属性
成员val AuthorId=0,带有get,set
成员val Username=”“,带有get,set
成员val Token=”“,带有get,set
Fabulous使用模型的记录类型,我创建了一个
作者
记录类型,在Fabulous内部传递:

类型作者=
{authord:int
用户名:string
标记:字符串}
但我还必须与一个web服务API库(用C#编写)交互,该库返回一个
AuthorDetailDto
对象
AuthorDetailDto
的命名属性与上面的相同,还有更多我不需要担心的属性。我无法将
authordetaildt的定义更改为

因此,目前的约束条件似乎是sqlite net pcl需要一个包含成员的对象,Fabulous需要一个记录类型,我从服务API客户端库中找到了这个
AuthorDetailDto
对象,我无法更改。我需要在这些类型之间进行转换,我最初希望我可以通过以下方式逃脱:

let convertToObject author=//希望这里的author参数在某种程度上是泛型的
设obj=AuthorObject()

我不熟悉您正在使用的工具,但我只想指出,“具有成员的对象”和记录类型之间唯一的显著区别是记录字段在默认情况下是不可变的。也许您可以使您的记录类型的字段可变,以满足sqlite net pcl和Fableus的要求?@brianberns-是的,谢谢,我想到了这一点。我不确定使用对象而不是记录类型是否会让我在某种程度上与神话框架发生冲突,这是我所不知道的,因为我正在开发的神话应用程序的示例既有SQLite类的“带有成员的对象”,也有神话模型的单独记录类型。所以我认为这是有充分理由的。但是值得一试。也许您可以尝试创建一个具有可变字段的作者记录:
type Author={mutable AuthorId:int;mutable Username:string;mutable Token:string}
生成的类具有getter和setter。