1

我在如何组织我的 AutoQuery 代码方面遇到了一些问题。我的项目结构目前看起来像:

/Project
/Project.ServiceInterface
  Service.cs
/Project.Logic
  Manager.cs
  /Types
    DbModel.cs
/Project.ServiceModel
  Request.cs
  /Types
    DtoModel.cs

使用此设置,ServiceModel 不了解逻辑模型。QueryDb<DbModel, DtoModel>正因为如此,如果不复制 ServiceModel 中的所有 DbModel 对象或在 ServiceModel 中添加对 Logic 的依赖项,我就无法进行请求查询。我也有自定义的 AutoQuery 服务实现,在这些实现中我希望能够利用在其他地方使用我的 DbModel 编写的代码。

有没有人有任何建议或相关例子?我觉得我错误地处理了这个问题,使它变得比需要的更复杂。谢谢。

4

1 回答 1

1

Auto Query允许您通过定义Request DTO来创建服务,因为它引用的所有类型也必须是ServiceModel程序集,因此您需要将 AutoQuery Services 引用的数据模型移动到您的ServiceModel项目或注释您的 DTO 以便它OrmLite 可以使用它来查询您的 RDBMS 表,它可以使用[Alias]名称不同的[Ignore*]属性以及取决于属性是否应该存在于 OrmLite 或序列化中的属性,例如:

[Alias("MyTable")]
public class MyDto
{
    [Alias("DbName")]
    public string DtoName { get; set; }

    [Ignore] 
    public string IgnoredInOrmLite { get; set; }

    [IgnoreDataMember] 
    public string IgnoredInSerialization { get; set; }
}

否则,您将无法使用自动查询,并且需要创建自定义服务,其内部实现使用您的数据模型,这些数据模型对您的公共服务合同隐藏。

就我个人而言,我建议将您需要的数据模型移动到您的ServiceModel程序集(继续使用与其他数据模型相同的命名空间),因为OrmLite 数据模型是类似于 DTO 的 POCO,通常不需要任何额外的引用,而不是 impl-free服务堆栈.接口。

于 2019-08-14T04:59:44.327 回答