gpt4 book ai didi

entity-framework - 构建/构建 Azure 移动应用服务 Entity Framework 代码优先和 .NET APK 项目

转载 作者:行者123 更新时间:2023-12-04 08:32:26 30 4
gpt4 key购买 nike

我是一位经验丰富的 .NET/C# 开发人员,但对这里的几乎所有技术/库(包括 SQL/DB 工作)都是新手。

我正在开发一个具有 Azure/Entity Framework .NET 后端和可移植 .Net APK 的项目,以供许多其他项目使用。我试图遵循推荐的实践和指南,但令人惊讶的是很难找到文档。我发现自己反复感觉自己正在与系统作斗争,并用钝汤匙慢慢地扑灭看似无穷无尽的火灾。

我发现自己想知道我使用的整体架构是否是这里的根本问题。我更愿意假装我不仅仅是无能。

当前结构

  • DTO 契约(Contract)项目
    • 在其他两个项目之间共享的 DTO 类的接口(interface)
  • 后端项目
    • DTO 接口(interface)的实现 + 模型类之间的转换
    • 首先编写数据库模型类
    • TableController<SOME_DTO_CLASS>实现
    • ApiController对于非查询操作
  • 可移植 SDK 库项目
    • DTO 接口(interface)的实现 + SDK 类之间的转换
    • SDK 公开的类供其他应用程序使用
    • 包装 MobileServiceClient 的服务类和IMobileServiceTable并公开 SDK 类

动机/实现

合约接口(interface)

DTO 合约接口(interface)的动机是尽可能远离魔术字符串/依赖成员名称。这些是接口(interface)而不是类,因为 TableController<T>需要 ITableData 的实现,它不可用于可移植 DTO 合约项目。

后端

TableController<SOME_DTO_CLASS>类 GET 方法当前引用当前上下文(不是 this.Query() )和 .Select()创建 DTO 类的匹配实例。延迟加载完好无损。这些 GET 方法应用 .Where()this.User仅过滤掉用户有权访问的实体。

代码优先模型完全源自EntityData ,即使该类不会通过 TableController<T> 公开。导航属性用于未通过其自身公开的类型 TableController<T> 。使用Fluent API来描述关系。

DTO 类将其关系属性公开为接口(interface)类型而不是具体类型,因为这就是接口(interface)的工作方式。

SDK

目前使用IMobileServiceTable但可能会切换到 IMobileServiceSyncTable在某个时刻。

DTO 类将其关系属性公开为接口(interface)类型而不是具体类型,因为这就是接口(interface)的工作方式。

当前燃烧的勺子目标

现在,我已经成功地公开了从数据库中提取的 SDK 类型。 DB model -> DB DTO --> *MS Code* --> SDK DTO -> SDK exposed class所有作品。

有点。

公开其他 DB DTO 类的 DB DTO 类的属性似乎在传输中被忽略,尽管它们是 GET 方法中返回的 IQueryable 的一部分。我无法使用 $expand= 检索它们显然The specified type member 'TestClass' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.如果我从接口(interface)属性类型切换到具体属性类型,这种情况仍然会发生。

我可以通过仅包含外键 ID 并在 SDK 中单独获取链接实体来避免此问题,但这似乎非常低效,而且有点不可行。

回答这个问题吧,你这个凌晨四点的傻瓜!

讨厌吗?

更具体地(正式地)当前的项目结构是否合理并且可能可持续?是否有任何明显的缺陷或疏忽会阻止其发挥作用?

假设这是相当合理的,那么解决 DTO $expand 问题的正确方法是什么?

最佳答案

$expand 属性是可行的方法,但不幸的是 Azure 移动客户端 SDK 在查询字符串中阻止了该属性。它将来会被修复,但目前您最好的选择是使用服务器端的属性在传入请求上添加查询字符串。

有关此示例,请参阅 https://github.com/paulbatum/FieldEngineerLite/blob/master/FieldEngineerLite.Service/Helpers/ExpandPropertyAttribute.cs 。该示例适用于 Azure 移动服务,但该代码可以轻松应用于 Azure 移动应用服务器 SDK。

关于entity-framework - 构建/构建 Azure 移动应用服务 Entity Framework 代码优先和 .NET APK 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34604026/

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