如何在不继承 TableEntity 或实现 ITableEntity 的情况下创建自定义实体

How to create custom entity without inheriting from TableEntity or implementing ITableEntity

是否可以在不实现 ITableEntity 或从 TableEntity 继承的情况下创建自定义实体?

如果我正在实施 ITableEntity,那么它会迫使我实施一些我不想实施的其他方法。

如果我从 TableEntity 继承我的自定义实体,那么我需要在将它传递给 table 操作之前对其进行更新,这会引入无法模拟的直接依赖关系,并且我的控制器 class 变成非 testable.

我只想创建我的自定义实体并保存在 Azure table 存储中。

Is it possible to create custom entities without implementing ITableEntity or inheriting from TableEntity?

硬着头皮说:没有
您需要实现此接口或继承此 class 的原因是 TableOperationITableEntity 作为参数。

如果你真的希望只能使用自己的classes和接口,那么你可以自己实现与Azure服务的通信。例如,here是Insert Entity操作的描述。您将不得不编写一个包装器来...复制 Microsoft 库提供的现有功能。

但看起来你正在尝试做一些奇怪的事情。
第一件奇怪的事情是您正在尝试测试控制器。通常你不会这样做。请问您使用的是什么类型的控制器,为什么要测试它们?
第二个奇怪的事情是您试图将继承自 TableEntity 或实现 ITableEntity 的东西传递给某些不是存储库的方法或某些 class 仅在数据层中工作的方法.

通常您永远不会使用实现 ITableEntity 或从数据层之外的 TableStorage 继承的东西 class。 class 应该只从一些存储中读取并检索 映射到业务对象 数据或写入某些存储,将 DTO 或业务层对象本身作为参数或简单类型如字符串、整数、日期时间。而这样的 classes 是不可测试的。它是数据层,您应该测试业务逻辑或高于处理原始数据和数据存储的某些层。

因此,考虑在您的系统中引入一个新的抽象级别 — 存储库或一些类似的东西,它们将与存储一起工作,返回业务对象。这种抽象应该有一个可以很容易地模拟和测试的接口。此类 class 的方法应采用业务层对象、DTO 或 .NET 类型的对象。它仅用于 DI,不用于测试。这样的 classes 通常不会被测试。

部分答案已过时。是的,有可能。您可以使用存储 sdk 中的 TableEntityAdapter class 并使用您的自定义对象实例化它。该对象不需要继承TableEntityclass或实现ITableEntity接口: https://docs.microsoft.com/en-us/dotnet/api/microsoft.windowsazure.storage.table.tableentityadapter-1?view=azure-dotnet