有没有一种简单的方法可以将 POCO 实体转换为 gRPC 对象?

时间:2021-05-05 15:43:53

标签: entity-framework-core grpc

好吧,我有一个必须与远程数据库通信的客户端应用程序。这个想法是有这个的:

client(使用 EF 仓库的 POCO 实体)--> gRPC 客户端 --> gRPC 服务 --> 仓库(EF 使用 POCO 实体)

我的存储库有 CRUD 操作和其他业务逻辑。我知道也许使用 DDD 并为模型设置一个单独的层和存储库的另一个层会更好,但在这种情况下,项目开始考虑存储库是具有逻辑的主层,以确保信息数据库已正确保存。无论如何,对于这个问题,这并不重要。

我的问题是在 gRPC 中我不能使用 .NET 对象,所以我必须将我的 POCO 实体转换为 gRPC 的消息。

例如,我有这个 POCOs 类:

class Order
{
    long IDOrder;
    long IDClient

    Person Client;
}

class Client
{
    long IDClient;
    string Name;

    ICollection<Orders> Orders;
}

我的 gRPC 项目中是否应该有两个从 POCO 实体转换为消息和从消息转换为实体的类,以便可以调用存储库的方法?类似的东西:

class GrpcOrders
{
    static MessageOrder OrderToMessage(Orders paramOrder)
    {
        //Here I create a message and copy the data from the order to the message
    }

    static Order MessageToPoco(MessageOrder paramOrder)
    {
        //Here I create a POCO entitie and copy the data from the message to the order
    }
}

客户端类也是如此。

这是一项非常手动的工作,而且如果导航属性属于具有其他导航属性的类型,则可能需要大量工作,因为当我向存储库请求数据时,有时我会请求包含导航属性在 2 或 3 个级别中,因此以这种方式从 POCO 转换为消息,将消息转换为 POCO 可能是一项非常庞大的工作。

所以我想知道这是否真的是要走的路,或者是否有其他更好的选择。

我在互联网上搜索了一些如何在 gRPC 中使用实体核心的示例,但我只找到了非常简单的示例,其中他们没有使用具有导航属性的类,而只是发送一两条消息,它们是更多示例将数据从服务发送到客户端,了解如何实现将 EF Core 与 gRPC 结合使用的解决方案。

谢谢。

0 个答案:

没有答案
相关问题