我正在将.NET4.6上的ASP.NETWeb API更新到.NET7,我对EF Core有一些问题.我正在使用HTTP POST
创建一个新事件,并收到以下错误:
Status: 400
One or more validation errors occurred The Trs field is required
The Reason field is required
The LineStatus field is required
这些都是Event
上的虚拟财产:
public partial class Event
{
public int IssueId { get; set; }
public int? IssueNum { get; set; }
public int? IssueNumH { get; set; }
public int IssueVersion { get; set; }
public bool Replaced { get; set; }
public int TrsId { get; set; }
public int ReasonId { get; set; }
public string? Comments { get; set; }
public int LineStatusId { get; set; }
public DateTime TimeStart { get; set; }
public DateTime? TimeEnd { get; set; }
public int EventEditorId { get; set; }
public int? Ticketuid { get; set; }
public DateTime? TimeEndValue { get; set; }
public int Archived { get; set; }
public int? OriginalEvent { get; set; }
public DateTime? CreatedDate { get; set; }
public int? RelatedEvent { get; set; }
public virtual LineStatus LineStatus { get; set; } = null!;
public virtual ReasonTree Reason { get; set; } = null!;
public virtual WorkOrder? Ticketu { get; set; }
public virtual TrsId Trs { get; set; } = null!;
}
我try 在这些属性上使用[JsonIgnore]
属性,但似乎没有任何作用.
我还将它们注释掉,因为我还不需要关系对象.这就是控制器方法,我可以看到该事件具有它需要在数据库表中匹配的所有属性,但是当它调用SaveChanges
时,我得到这个错误:
SqlException: Invalid column name 'ReasonTreeId'.
Invalid column name 'TrsId1'.
Invalid column name 'WorkOrderTicketuid'.
我对EF Core不是很熟悉,有没有什么方法可以在模型构建器中设置我的模型,告诉它在模型绑定时忽略属性?我还做错了什么吗
以下是我的控制器和模型构建器上的端点:
// POST: api/Events
[HttpPost]
public async Task<ActionResult<Event>> PostEvent(Event @event)
{
if (_context.Events == null)
{
return Problem("Entity set 'TrsContext.Events' is null.");
}
_context.Events.Add(@event);
await _context.SaveChangesAsync();
return CreatedAtAction("GetEvent", new { id = @event.IssueId }, @event);
}
modelBuilder.Entity<Event>(entity =>
{
entity.HasKey(e => e.IssueId);
entity.HasIndex(e => e.IssueNum, "IX_Events_IssueNum");
entity.HasIndex(e => new { e.Replaced, e.TrsId, e.TimeStart, e.TimeEnd }, "IX_Events_Replaced_TrsID_Start_End");
entity.Property(e => e.IssueId).HasColumnName("IssueID");
entity.Property(e => e.Archived).HasComputedColumnSql("(case when [TimeEnd]<dateadd(year,(-1),getdate()) then (1) else (0) end)", false);
entity.Property(e => e.CreatedDate)
.HasDefaultValueSql("(getdate())")
.HasColumnType("datetime");
entity.Property(e => e.EventEditorId).HasColumnName("EventEditorID");
entity.Property(e => e.IssueNum).HasComputedColumnSql("(coalesce([IssueNum_h],[IssueID]))", false);
entity.Property(e => e.IssueNumH).HasColumnName("IssueNum_h");
entity.Property(e => e.LineStatusId)
.HasDefaultValueSql("((1))")
.HasColumnName("LineStatusID");
entity.Property(e => e.ReasonId).HasColumnName("ReasonID");
entity.Property(e => e.Ticketuid).HasColumnName("ticketuid");
entity.Property(e => e.TimeEnd).HasColumnType("datetime");
entity.Property(e => e.TimeEndValue)
.HasComputedColumnSql("(coalesce([TimeEnd],getdate()))", false)
.HasColumnType("datetime");
entity.Property(e => e.TimeStart).HasColumnType("datetime");
entity.Property(e => e.TrsId).HasColumnName("TrsID");
entity.HasOne(d => d.LineStatus).WithMany(p => p.Events)
.HasForeignKey(d => d.LineStatusId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Events_LineStatus");
entity.HasOne(d => d.Reason).WithMany(p => p.Events)
.HasForeignKey(d => d.ReasonId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Events_ReasonTrees");
entity.HasOne(d => d.Ticketu).WithMany(p => p.Events)
.HasForeignKey(d => d.Ticketuid)
.HasConstraintName("FK_Events_WorkOrders");
entity.HasOne(d => d.Trs).WithMany(p => p.Events)
.HasForeignKey(d => d.TrsId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Events_TrsIDs");
});