我正在使用.Net制作Web API,它正在从Web表单接收自定义JSON对象以序列化到模型。我目前在显示API响应时遇到问题。我首先将数据存储在内存数据库中只是为了使其正常工作。
尽管我的模型上定义了一个键,但我不确定为什么它要我提供主键。
我的下一步是添加多部分形式的数据,但这是蠕虫病毒本身的罐头。
错误发生在_context.ProjectItems.ToListAsync();
行。
我已经为模型添加了ID。
[Required]
[Key]
public new long Id { get; set; }
[HttpGet("{id}")]
public async Task<ActionResult<ProjectItem>> GetProjectItem(long id)
{
var projectItem = await _context.ProjectItems.FindAsync(id);
if (projectItem == null)
{
return NotFound();
}
return projectItem;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<ProjectItem>>>
GetProjectItems()
{
return await _context.ProjectItems.ToListAsync();
}
我的模型:ProjectItem.cs
using System.ComponentModel.DataAnnotations;
namespace RupAPI.Controllers
{
public class ProjectItem : Project
{
[Required]
[Key]
public new long Id { get; set; }
public string ProjName { get; set; }
public DateTime DateSub { get; set; }
public DateTime DueDate { get; set; }
public DateTime ArrivalDate { get; set; }
public string Desc { get; set; }
public Array Sku { get; set; }
public Array SkuDesc { get; set; }
public Array Item { get; set; }
public Array ItemDesc { get; set; }
public Array FileName { get; set; }
public new byte[] File { get; set; }
}
}
处理请求时发生未处理的异常。 InvalidOperationException:实体类型'Array'需要定义一个主键。 Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidateNonNullPrimaryKeys(IModel模型) 堆栈查询Cookie标头 InvalidOperationException:实体类型'Array'需要定义一个主键。 + 返回等待_context.ProjectItems.ToListAsync(); lambda_method(Closure,object)
答案 0 :(得分:0)
重新考虑将Array
用作属性的类型,这会导致此问题。
如果这些属性确实不只是string
,请创建其他模型来表示这些属性,然后使用relationships将它们存储在数据库中。
如果属性是字符串列表,则提出了here的几种解决方案。如果可能的话,我会寻求Sasan的解决方案,这是针对您的情况,将Array
替换为string[]
并添加
modelBuilder.Entity<ProjectItem>()
.Property(e => e.Sku)
.HasConversion(
v => string.Join(',', v),
v => v.Split(',', StringSplitOptions.RemoveEmptyEntries));
// TODO: also to that for the other properties
访问数据库上下文的OnModelCreating。