【问题标题】:How can I store multiple images in a database with a Blazor application?如何使用 Blazor 应用程序将多个图像存储在数据库中?
【发布时间】:2021-07-03 20:52:23
【问题描述】:

我有一个向用户显示表单的应用程序。该表单由服务器获取并存储在数据库中,可以在应用程序的另一个页面上读取信息。表单的一部分采用图像,其中图像被转换为​​ Base64 字符串并发送到 Azure 进行存储,图像的 URL 作为字符串存储在数据库中。这一切都很好。我的麻烦在于尝试实现用户可以选择多个图像的功能。

我尝试将string Image {get;set;} 更改为List<string> {get;set;},其中数据库将仅存储URL 列表,我可以在应用程序中迭代它们。这显然不起作用,因为通过一些研究,我了解到数据库不能存储列表。

我现在想知道我能在这里做什么。有没有我想念的更简单的方法?我做错了什么?

【问题讨论】:

  • 这更像是一个数据库概念问题。你用的是什么数据库?简短回答:对于 SQL,您需要使用两个表。一个带有用户 ID 和其他信息。一个带有图像 URL + 用户 ID。对于 MongoDB,您可以使用列表。 MongoDB是文档数据库,一个文档可以包含其他文档。
  • Remi 是正确的,如果您使用 sql,您必须创建另一个表来保存照片的 id 并将其与主表链接,或者如果您有 postgres sql,您可以将图像 id 保存为Guid,它确实支持 List

标签: asp.net asp.net-core blazor blazor-webassembly asp.net-blazor


【解决方案1】:

我尝试将字符串 Image {get;set;} 更改为 List {get;set;} 数据库将只存储 URL 列表 我可以在应用程序中遍历它们。这显然 没用,因为通过一些研究,我了解到数据库 无法存储列表。

您可以尝试使用以下方法:

  1. 在图片网址之间添加分隔符。使用string Image {get;set;}来存储图片的url,值是这样的:“image1url,image2url,etc”(使用,作为分隔符)。您可以考虑使用String.Join Method

  2. 新建一个Image表来存储Image信息(包含ID、Name、Urls),然后配置Main表和Image模型之间的一对多关系。在 Main 模型中,使用导航属性添加 Image。像这样的代码:

     public class Main
     {
         public int Id { get; set; }
         public string Name { get; set; }
         public List<Image> Images { get; set; }
     }
     public class Image
     {
         public int Id { get; set; }
         public string Name { get; set; }
         public string Url { get; set; }
     }
    

    有关Entity关系的更多详细信息,请参见:

    Relationships

    Configuring One To Many Relationships in Entity Framework Core

    Saving Related Data

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2017-07-22
    • 2017-06-27
    • 2015-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多