我一直在使用ASP.NET Core 3开发图书馆管理Web API。我有一个名为LibraryAsset的基类,另一个名为Book的类,Book类继承自LibraryAsset类。我使用EF核心CF工作流构建数据库,并为LibraryAsset创建了一个数据表,该数据表带有一个鉴别符列。
我对API进行了测试,以获取所有库资产,它返回了库资产,但是缺少某些属性。这些属性在Books类中。使用API调用时如何将这些属性添加到图书馆资产?
这是Book.cs类:
public class Book: LibraryAsset
{
public string ISBN { get; set; }
[Required]
[StringLength(255)]
public string Author { get; set; }
}
这是LibraryAsset类
public class LibraryAsset
{
public int Id { get; set; }
public string Title { get; set; }
public int YearPublished { get; set; }
public float Cost { get; set; }
}
这是我在测试API时得到的结果
{
"id": 1,
"title": "Children of Blood and Bone",
"yearPublished": 2018,
"cost": 8000
}
这是API的获取函数:
public async Task<IEnumerable<LibraryAsset>> GetAllAssets() {
return await _context.LibraryAssets.ToListAsync();
}
答案 0 :(得分:1)
您可以直接使用JsonConvert.SerializeObject
返回JSON:
using Newtonsoft.Json;
public async Task<string> GetAllAssets() {
return JsonConvert.SerializeObject(await _context.LibraryAssets.ToListAsync());
}
或者,您可以更改签名以返回Task<JsonResult>
并执行return new JsonResult(await _context.LibraryAssets.ToListAsync());
答案 1 :(得分:0)
有一个名为LibraryAsset的基类和另一个名为Book的类,Book类继承自LibraryAsset类。我使用EF核心CF工作流构建数据库,并为LibraryAsset创建了一个数据表,该数据表带有一个鉴别符列。
对API进行测试以获取所有库资产,它返回库资产,但是缺少某些属性。
如果您想获取所有书籍,可以尝试:
await _context.Books.ToListAsync();
如果您想从数据库表LibraryAsset
中获取所有资产,可以尝试:
public async Task<IActionResult> GetAllAssets()
{
using (var command = _context.Database.GetDbConnection().CreateCommand())
{
command.CommandText = "SELECT Id, Title, YearPublished, Cost, Discriminator, ISBN, Author FROM dbo.LibraryAsset";
_context.Database.OpenConnection();
using (var myDataReader = command.ExecuteReader())
{
var dt = new DataTable();
dt.Load(myDataReader);
var allAssets = dt.AsEnumerable().Select(s => new
{
Id = s.Field<int>("Id"),
Title = s.Field<string>("Title"),
YearPublished = s.Field<int>("YearPublished"),
Cost = s.Field<float>("Cost"),
ISBN = s.Field<string>("ISBN"),
Author = s.Field<string>("Author")
}).ToList();
return Ok(allAssets);
}
}
}