c# - 在 Entity Framework Core 中将 int 数组添加到数据库
问题描述
我想制作一个可以接收任意数量子 ID 的 API。并在数据库中循环它,为每个子 ID 添加 1 行。我尝试将 CategoryChildId 设为列表或数组,但它说实体框架不接受原始类型。
我怎样才能做到这一点?
例如,当我收到这样的 json 时:
"CategoryParentID": "4",
"CategoryChildID": [
{
5,6,7
}
],
它将像这样将其存储在数据库中。
我只有一次添加单个孩子的代码。
控制器的服务:
public async Task<ServiceResultWithoutBaseEntity<CategoryRollup>> Add(CategoryRollupViewModel newItem)
{
var result = new ServiceResultWithoutBaseEntity<CategoryRollup>();
result.Errors.AddRange(Validate(newItem));
if (result.HasErrors)
return result;
var item = newItem.MapToEntity(new CategoryRollup());
_context.CategoryRollups.Add(item);
await _context.SaveChangesAsync();
result.EntityResult = item;
return result;
}
模型:
public class CategoryRollup
{
[Key]
public int ID { get; set; }
public int CategoryChildID { get; set; }
public int CategoryParentID { get; set; }
}
查看模型:
public class CategoryRollupViewModel
{
[Key]
public int ID { get; set; }
public int CategoryChildID { get; set; }
public int CategoryParentID { get; set; }
}
帮手:
public static class CategoryRollupHelper
{
public static CategoryRollupViewModel MapFromEntity(this CategoryRollup source)
{
if (source == null)
return null;
var result = new CategoryRollupViewModel
{
CategoryChildID = source.CategoryChildID,
CategoryParentID = source.CategoryParentID,
};
return result;
}
public static CategoryRollup MapToEntity(this CategoryRollupViewModel source, CategoryRollup entity)
{
if (source == null || entity == null)
return null;
entity.CategoryChildID = source.CategoryChildID;
entity.CategoryParentID = source.CategoryParentID;
return entity;
}
}
解决方案
JSON 示例无效。必须包含一个CategoryChildID
整数数组(删除{}
)。
让我们假设 JSON 具有以下结构:
"CategoryParentID": "4",
"CategoryChildID": [5,6,7]
这意味着您的视图模型应该包含两个属性(创建新类)
public class CategoryRollupViewModelV2
{
public List<int> CategoryChildID { get; set; }
public int CategoryParentID { get; set; }
}
将您的控制器代码更改为:
public async Task<ServiceResultWithoutBaseEntity<CategoryRollup>> Add(CategoryRollupViewModelV2 newItem)
{
...
foreach(var categoryChildId in newItem.CategoryChildID)
{
var categoryRollupEntity = new CategoryRollup
{
CategoryParentID = newItem.CategoryParentID,
CategoryChildID = categoryChildId
}
_context.CategoryRollups.Add(categoryRollupEntity);
}
await _context.SaveChangesAsync();
...
}
推荐阅读
- vue.js - Vuejs - 选中/取消选中复选框时如何更改属性值并更新相同
- flutter - Flutter - 从 iOS 模拟器中检索代码
- javascript - 将嵌套的 if else 写入三元运算符
- html - 将 HTML 页面中的文本保存到变量中,以用作单独 jQuery 函数的输入
- reactjs - 当参数随旧状态更改时反应更新组件
- reactjs - 使用 AWS amplify DataStore 和 GraphQL 创建突变时出错:“变量‘输入’已强制非空类型‘ID!’的空值!”
- amazon-s3 - AWS Glue - getSink() 在glue_context.purge_s3_path 之后立即抛出“没有这样的文件或目录”
- c# - 在不同的 using-statment 中使用相同的一次性对象两次
- java - Android Room:使用 ViewModel、Repository、Database 插入多对多关系实体
- python - 错误说我有 NaN、无穷大或对于 dtype('float64') 来说太大的值