使用 sqlite-pcl 和通用存储库存储具有 class 属性的自动映射对象
Storing automapped object with class properties with sqlite-pcl and a generic repository
我正在处理的项目是一个 Xamarin 移动应用程序,具有 REST api 和离线首次实践。
为了实现这一点,我设置了一个通用存储库,它应该处理与设备上 SQLite 数据库的通信。
离线优先仅作为读取数据的回退机制,不需要处理'complex scenarios'
我们正在使用 automapper 将 http json 对象转换为域到数据库表,问题是我们在存储数据库 dto 对象的 class 属性时遇到了问题。
映射时,卸载和加载地址已正确转换,但 sqlite 似乎无法将 Address_DTO 对象解析为字符串。
查看命令 dto 的地址和地址 blob。
/// DTO Wrapper for storing order information do the database
/// </summary>
/// <seealso cref="CarrierConnectMobile.Core.Repositories.EntityBase" />
[Table("Orders")]
public class DTO_DBOrder : EntityBase
{
public string? LicensePlate { get; set; }
public string Quantity { get; set; }
public string ProductKind { get; set; }
public string ProductType { get; set; }
public string Product { get; set; }
public OrderStatus Status { get; set; }
public bool ProvidedUnloadData { get; set; }
public bool ProvidedLoadData { get; set; }
[TextBlob("UnLoadAddressBlob")]
public DTO_DBAddress UnloadAddress { get; set; }
[TextBlob("LoadAddressBlob")]
public DTO_DBAddress LoadAddress { get; set; }
public string UnLoadAddressBlob { get; set; }
public string LoadAddressBlob { get; set; }
}
数据库的 DTO 对象的自动映射器配置文件具有相同的 UnloadAddress 和 LoadAddress 命名约定,并且它们使用以下最小设置正确映射。
public DBProfiles()
{
CreateMap<DTO_DBAddress, DTO_HttpAddress>().ReverseMap();
CreateMap<DTO_DBAddress, Address>().ReverseMap();
CreateMap<DTO_DBOrder, Order>()
.ReverseMap();
CreateMap<DTO_DBOrder, DTO_httpOrderListItem>()
.ForMember(d => d.Status, opt => opt.ConvertUsing(new OrderStatusStringToEnumConverter(), src => src.Status))
.ReverseMap();
}
是否配置有误?因为我似乎无法找出为什么 sqlite 没有将地址对象存储为字符串 blob 并正确解析它
迟到总比不到好。留给以后有需要的人。
问题是使用常规的 sqlLite 库方法引起的,而不是来自 sqllite-pcl 的 sqlite 扩展库。
using STLiteNetExtensionsAsync.Extensions
没有得到我所依赖的自动完成的建议。我不知道如果不使用扩展,对象的序列化将不起作用。
我正在处理的项目是一个 Xamarin 移动应用程序,具有 REST api 和离线首次实践。 为了实现这一点,我设置了一个通用存储库,它应该处理与设备上 SQLite 数据库的通信。
离线优先仅作为读取数据的回退机制,不需要处理'complex scenarios'
我们正在使用 automapper 将 http json 对象转换为域到数据库表,问题是我们在存储数据库 dto 对象的 class 属性时遇到了问题。
映射时,卸载和加载地址已正确转换,但 sqlite 似乎无法将 Address_DTO 对象解析为字符串。
查看命令 dto 的地址和地址 blob。
/// DTO Wrapper for storing order information do the database
/// </summary>
/// <seealso cref="CarrierConnectMobile.Core.Repositories.EntityBase" />
[Table("Orders")]
public class DTO_DBOrder : EntityBase
{
public string? LicensePlate { get; set; }
public string Quantity { get; set; }
public string ProductKind { get; set; }
public string ProductType { get; set; }
public string Product { get; set; }
public OrderStatus Status { get; set; }
public bool ProvidedUnloadData { get; set; }
public bool ProvidedLoadData { get; set; }
[TextBlob("UnLoadAddressBlob")]
public DTO_DBAddress UnloadAddress { get; set; }
[TextBlob("LoadAddressBlob")]
public DTO_DBAddress LoadAddress { get; set; }
public string UnLoadAddressBlob { get; set; }
public string LoadAddressBlob { get; set; }
}
数据库的 DTO 对象的自动映射器配置文件具有相同的 UnloadAddress 和 LoadAddress 命名约定,并且它们使用以下最小设置正确映射。
public DBProfiles()
{
CreateMap<DTO_DBAddress, DTO_HttpAddress>().ReverseMap();
CreateMap<DTO_DBAddress, Address>().ReverseMap();
CreateMap<DTO_DBOrder, Order>()
.ReverseMap();
CreateMap<DTO_DBOrder, DTO_httpOrderListItem>()
.ForMember(d => d.Status, opt => opt.ConvertUsing(new OrderStatusStringToEnumConverter(), src => src.Status))
.ReverseMap();
}
是否配置有误?因为我似乎无法找出为什么 sqlite 没有将地址对象存储为字符串 blob 并正确解析它
迟到总比不到好。留给以后有需要的人。
问题是使用常规的 sqlLite 库方法引起的,而不是来自 sqllite-pcl 的 sqlite 扩展库。
using STLiteNetExtensionsAsync.Extensions
没有得到我所依赖的自动完成的建议。我不知道如果不使用扩展,对象的序列化将不起作用。