You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中如何将List类型数据存储到SQL Server数据库

常见处理方案分两种,可根据你的业务场景选择:


方案1:ORM导航属性一对多关联存储(推荐,适合需要单独查询地址的场景)

这是最通用的关系型数据库设计方案,需要额外建地址表存储地址数据,地址表加外键关联主表的主键Id,对应实体调整如下:

// 主表实体
public class MainModelEnity
{
    public string Id { get; set; } = default!;
    // 额外提示:这里你定义的double? Name明显不符合业务逻辑,建议改成string? Name
    public double? Name { get; set; } = default!;
    public string? FamilyName { get; set; } = default!;
    // 配置为一对多导航属性
    public List<AddressesEnity> ClientAddress { get; set; } = new();
}

// 地址表实体
public class AddressesEnity
{
    public string Id { get; set; } = default!;
    public string Address { get; set; } = default!;
    // 外键,关联主表主键
    public string MainModelId { get; set; } = default!;
}

存储逻辑直接赋值即可,EF/EF Core这类ORM会自动处理主表、地址表的关联插入,自动维护外键:

public async Task<bool> StoreModel(MainModel mainmodel) 
{
     var listtostore = new MainModelEnity()
                           {
                               Id = mainmodel.Id, // 不要漏了主表主键赋值
                               Name = mainmodel.Name,
                               FamilyName = mainmodel.FamilyName,
                               // 业务模型转实体
                               ClientAddress = mainmodel.ClientAddress.Select(a => new AddressesEnity
                               {
                                   Id = Guid.NewGuid().ToString(), // 按你自己的规则生成地址主键
                                   Address = a.Address
                               }).ToList()
                           };
     _dbContext.MainModelEnities.Add(listtostore);
     await _dbContext.SaveChangesAsync();
     return true;
}

方案2:序列化后存入主表单字段(适合仅需整存整取地址的场景)

如果你不需要对地址做SQL级别的查询、过滤、聚合,只需要整体存储读取,可以把地址列表序列化为JSON字符串存在主表的varchar/text类型字段里,对应实体调整如下:

public class MainModelEnity
{
    public string Id { get; set; } = default!;
    public double? Name { get; set; } = default!;
    public string? FamilyName { get; set; } = default!;
    // 存储序列化后的地址JSON
    public string ClientAddress { get; set; } = default!;
}

赋值逻辑直接序列化即可:

ClientAddress = System.Text.Json.JsonSerializer.Serialize(mainmodel.ClientAddress)

读取数据时再反序列化为List<Addresses>即可使用。

内容的提问来源于stack exchange,提问作者moris62

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:06:02