我在组织自动查询代码方面遇到一些问题。我的项目结构目前看起来像:
/Project
/Project.ServiceInterface
Service.cs
/Project.Logic
Manager.cs
/Types
DbModel.cs
/Project.ServiceModel
Request.cs
/Types
DtoModel.cs
使用此设置,ServiceModel不了解逻辑模型。因此,如果不能在本质上复制我的ServiceModel中的所有DbModel对象或向ServiceModel中的Logic添加依赖项,就无法进行类似QueryDb<DbModel, DtoModel>
的请求查询。我还具有自定义的AutoQuery服务实现,在这些实现中,我希望能够利用在其他地方使用DbModels编写的代码。
有人有任何建议或相关示例吗?我觉得我在错误地解决了这个问题,并使它变得比需要的更为复杂。谢谢。
答案 0 :(得分:1)
Auto Query使您可以通过定义请求DTO 来创建服务,因为它引用的所有类型也必须是 ServiceModel 程序集,因此您要么需要将您的自动查询服务引用的数据模型移动到您的 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 程序集(该程序集继续使用与其他DataModels相同的命名空间),就像OrmLite DataModels are POCOs除了无隐式的 ServiceStack.Interfaces 之外,不需要任何其他引用。