【问题标题】:How to store a multidimensional array (matrix) in the Entity Framework in ASP.NET Core如何在 ASP.NET Core 的实体框架中存储多维数组(矩阵)
【发布时间】:2020-10-24 10:21:33
【问题描述】:

可以在实体框架中存储一个值矩阵,该矩阵需要是动态的,具体取决于特定 库存数量的属性数量。 例如:

产品变体,例如:T 恤尺寸:XL,颜色:绿色,材质:棉质,有 5 单位。

价值矩阵

电子商务中使用的矩阵示例

但是这个值矩阵需要灵活地存储任何类型的值和任意数量的属性。

有可能吗?

问候

【问题讨论】:

    标签: c# asp.net entity-framework asp.net-core entity-framework-core


    【解决方案1】:

    我认为这可以通过三种方式实现,选择取决于您希望如何处理这些数据。

    1. JSON 属性

    只需将所有这些值存储在一个 json 对象中并将其序列化为字符串值。 EF 可以毫无问题地处理存储它。当你真正需要它时——打开它并使用数据向用户显示选项。或者,您可以编写自己的 JSON 对象和 Dictionary<string, object> 之类的转换,这样您的项目就会有一个属性,该属性具有自定义属性及其值的字典。

    请注意,处理这些数据的成本会非常高,因为您需要一直解开 JSON(即使您编写自定义 SQL 查询来在数据库端执行此操作,而无需将所有数据拉回应用层)。

    1. 实际的模型级概念

    您可以将自定义属性存储为单独的类模型(以便它们获得自己的表),然后引入第三个模型(数据库中的另一个表),它将存储指向特定属性的链接,链接到具有该属性的特定对象,以及您分配给它的值。

    这可能比第一种方法更有效。

    现在您可以保持原样,再次对字典进行强制转换(否则它将是一个对象列表并且通过名称访问属性应用程序端将是一件苦差事),或者甚至编写一些包装器,强制转换将对象检索到动态和动态返回到您的数据模型类。

    1. 面向文档的数据库

    嗯,这是存储此类数据的正确方式。这里有很多选择,但您几乎必须根据自己的需要调整工具。微软自己的 CosmosDB 在 .NET 中有一个 API,但我不确定是否有办法为此使用 EF。 BrightstarDB 有一个 EF 提供程序,所以有这个选项。最有效的方法或许是实现您自己的解决方案,同时使用 SQL 和 NoSQL 数据库。

    如果您确实需要这种功能并且希望它干净、快速,这将是您的最佳选择。或者你只是想写一堆包装器和转换器。

    【讨论】:

    • 很好的解释!谢谢你的时间!你真的让我头脑清醒了! ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2022-11-30
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多