我是asp.net Web API的新手。我正在使用EF Core处理数据。我在SQL Server中有两个表,USER_DATA
和WORK_DATA
。
我正在尝试发送HTTP GET请求并从WORK_DATA
表中获取数据,但是响应是500错误,并且没有内容。我可以完全获取并发布到USER_DATA
。我不仅可以获取WORK_DATA
。我认为路由是正确的,并且SQL Server表的结构错误,但是我不知道如何解决。
SQL Server结构在这里:数据库有两个表USER_DATA
和WORK_DATA
:
USER_DATA
具有以下列
Id (PK, varchar, notnull)
UserName (varchar, null)
RegisterDate (Date, null)
Field (varchar, null)
Password (varchar, null)
Heats (int, null)
WORK_DATA
具有以下列
WorkId (PK, varchar, notnull)
WorkName (varchar, null)
Detailinformation (varchar, null)
Salary (varchar, null)
Worklength (varchar, null)
Reliability (int, null)
RegisterDate (date, null)
isCompleted (bit, null)
Id (varchar, not null)
外键为Id
,其引用为USER_DATA.Id
。
模型在这里-Item
对应于SQL Server中的USER_DATA
,Workdata
对应于WORK_DATA
。
项目
using System;
using System.Collections.Generic;
namespace NewHeats.Models
{
public class Item
{
public string Id { get; set; }
public string UserName { get; set; }
public DateTime RegisterDate { get; set; }
public string Field { get; set; }
public string Password { get; set;}
public int Heats { get; set; }
}
}
工作数据:
using System;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
namespace NewHeats.Models
{
public class Workdata
{
public string WorkId { get; set; }
public string WorkName { get; set; }
public string DetailInformation { get; set; }
public string Salary { get; set; }
public string Worklength { get; set; }
public int Reliability { get; set; }
public DateTime RegisterDate { get; set; }
public int isCompleted { get; set; }
public string Id { get; set; }
[ForeignKey("Id")]
public Item Item { get; set; }
}
}
DbContext:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
namespace NewHeats.Models
{
public class ItemRepository : DbContext ,IItemRepository
{
public ItemRepository(DbContextOptions<ItemRepository> options)
: base(options)
{
}
protected override void OnModelCreating (ModelBuilder modelBuilder)
{
try
{
modelBuilder.Entity<Item>(entity =>
{
entity.HasKey(e => e.Id);
entity.ToTable("USER_DATA");
});
modelBuilder.Entity<Workdata>(entity =>
{
entity.HasKey(e => e.WorkId);
entity.ToTable("WORK_DATA");
});
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
public virtual DbSet<Item> USER_DATA { get; set; }
public virtual DbSet<Workdata> WORK_DATA { get; set; }
public Item Get(string id)
{
return USER_DATA.FirstOrDefault(x => x.Id == id);
}
public IEnumerable<Item> GetAll()
{
return USER_DATA.ToList();
}
public void Add(Item item)
{
item.Id = Guid.NewGuid().ToString();
USER_DATA.Add(item);
}
public Item Find(string id)
{
return USER_DATA.FirstOrDefault(x=>x.Id==id);
}
public Item Remove(string id)
{
return USER_DATA.FirstOrDefault(x => x.Id == id);
}
public void Update(Item item)
{
USER_DATA.Remove(USER_DATA.FirstOrDefault(x => x.Id == item.Id));
USER_DATA.Add(item);
}
public Workdata GetWorkdata(string workId)
{
return WORK_DATA.FirstOrDefault(x => x.WorkId == workId);
}
public IEnumerable<Workdata> GetAllWorkdata()
{
return this.WORK_DATA.ToList();
}
public void AddWorkdata(Workdata workdata)
{
workdata.WorkId = Guid.NewGuid().ToString();
WORK_DATA.Add(workdata);
}
public Workdata FindWorkdata(string workId)
{
return WORK_DATA.FirstOrDefault(x => x.WorkId == workId);
}
public Workdata RemoveWorkdata(string workId)
{
return WORK_DATA.FirstOrDefault(x => x.WorkId == workId);
}
public void UpdateWorkdata(Workdata workdata)
{
WORK_DATA.Remove(WORK_DATA.FirstOrDefault(x => x.WorkId == workdata.WorkId));
WORK_DATA.Add(workdata);
}
}
}
IItemRepository :
using System;
using System.Collections.Generic;
using System.Linq;
namespace NewHeats.Models
{
public interface IItemRepository
{
void Add(Item item);
void Update(Item item);
Item Remove(string key);
Item Get(string id);
IEnumerable<Item> GetAll();
void AddWorkdata(Workdata workdata);
void UpdateWorkdata(Workdata workdata);
Workdata RemoveWorkdata(string workid);
Workdata GetWorkdata(string workid);
IEnumerable<Workdata> GetAllWorkdata();
}
}
控制器在这里
ItemController
对应于我在SQL Server中的USER_DATA表
using System;
using Microsoft.AspNetCore.Mvc;
using NewHeats.Models;
namespace NewHeats.Controllers
{
[Route("api/[controller]")]
public class ItemController : Controller
{
private ItemRepository _itemRepository;
public ItemController(ItemRepository itemRepository)
{
_itemRepository = itemRepository;
}
[HttpGet]
public IActionResult List()
{
return Ok(_itemRepository.GetAll());
}
[HttpGet("{Id}")]
public Item GetItem(string id)
{
Item item = _itemRepository.Get(id);
return item;
}
[HttpPost]
public IActionResult Create([FromBody]Item item)
{
try
{
if (item == null || !ModelState.IsValid)
{
return BadRequest("Invalid State");
}
_itemRepository.Add(item);
_itemRepository.SaveChanges();
}
catch (Exception)
{
return BadRequest("Error while creating");
}
return Ok(item);
}
[HttpPut]
public IActionResult Edit([FromBody] Item item)
{
try
{
if (item == null || !ModelState.IsValid)
{
return BadRequest("Invalid State");
}
_itemRepository.Update(item);
_itemRepository.SaveChanges();
}
catch (Exception)
{
return BadRequest("Error while creating");
}
return NoContent();
}
[HttpDelete("{Id}")]
public void Delete(string id)
{
_itemRepository.Remove(id);
_itemRepository.SaveChanges();
}
}
}
WorkdataController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using NewHeats.Models;
namespace NewHeats.MobileAppService.Controllers
{
[Route("api/[controller]")]
public class WorkdataController :Controller
{
private ItemRepository _itemRepository;
public WorkdataController(ItemRepository itemRepository)
{
_itemRepository = itemRepository;
}
[HttpGet]
public IActionResult List()
{
return Ok(_itemRepository.GetAllWorkdata());
}
[HttpGet("{WorkId}")]
public Workdata GetItem(string workId)
{
Workdata workdata = _itemRepository.GetWorkdata(workId);
return workdata;
}
[HttpPost]
public IActionResult Create([FromBody]Workdata workdata)
{
try
{
if (workdata == null || !ModelState.IsValid)
{
return BadRequest("Invalid State");
}
_itemRepository.AddWorkdata(workdata);
_itemRepository.SaveChanges();
}
catch (Exception ex)
{
Console.WriteLine(ex);
return BadRequest("Error while creating");
}
return Ok(workdata);
}
[HttpPut]
public IActionResult Edit([FromBody] Workdata workdata)
{
try
{
if (workdata == null || !ModelState.IsValid)
{
return BadRequest("Invalid State");
}
_itemRepository.UpdateWorkdata(workdata);
_itemRepository.SaveChanges();
}
catch (Exception)
{
return BadRequest("Error while creating");
}
return NoContent();
}
[HttpDelete("{WorkId}")]
public void Delete(string workId)
{
_itemRepository.RemoveWorkdata(workId);
_itemRepository.SaveChanges();
}
}
}
我试图一周解决这个问题,但是我做不到。我搜索了很多stackoverflow,msdn等...请帮助我。
谢谢