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
相关产品推荐
相关产品推荐

