gpt4 book ai didi

C# 属性 hell - 在两个不同的 SQL 平台上的移动和服务器之间共享的一个类

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:35 24 4
gpt4 key购买 nike

我们共享一个 poco 的

  • ServiceStack 网络服务
  • ServiceStack Orm 与 MySQL
  • 使用 Sqlite.net 的 Xamarin 移动客户端。

问题是共享类变得一团糟。

        [PrimaryKey, AutoIncrement]
public int Id { get; set; }
#if __MOBILE__
[Indexed]
#else
[Index]
#endif
public string UserAccountId { get; set; }
#if __MOBILE__
[Indexed]
#else
[Index]
#endif

如果还不够糟糕,我需要

  • 限制数据库中每个字段的长度....
  • 将这些对象保存在 MongoDb 中。幸运的是,他们有一个 AutoMapper在运行时执行此操作的类。

不知道该怎么办。我失败的想法包括:

  • 尝试使用:[Conditional("DEBUG")]。但它对此没有任何作用

  • sqlite.net 似乎使用了它自己的属性

    [AttributeUsage (AttributeTargets.Property)] 公共(public)类 IndexedAttribute : 属性

    所以它不会找到Mysql的[Index]属性

  • 可以尝试在每个属性上包含两个属性

    [索引][指数]公共(public)字符串 UserAccountId { 得到;放;

  • 我试图将它变成两个一行,但 c# VS 提示

#if __MOBILE__ [Indexed]  #endif 
#if __MOBILE__ [Index] #endif

最后,** APPEARS ** 可行的唯一方法是将接口(interface)保留为类的单一定义,并拥有许多以不同方式装饰的具体类。

有什么想法吗??

最佳答案

如果您要按照鲍勃叔叔的整洁架构来构建您的代码,您就不会尝试将一个表示用于许多不同的目的,因为它会导致您的依赖项从高层策略向外指向外部圈子。

Clean Architecture

来源:https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html

实际上,您可以将一个 实体 与企业业务规则一起放在中心圆圈中,但是您用来存储/检索特定数据库数据的 DTO 应该在您的“框架”之外和司机”圈子。

所有这些特定于数据库的属性都属于蓝色圆圈中的 DTO,而不属于中心的实体。

关于C# 属性 hell - 在两个不同的 SQL 平台上的移动和服务器之间共享的一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com