Спасибо за ответ Хенк Холтерман at { ссылка }
(1) Контроллер
using myproj.Data;
public class SysAutoIdController : Controller
{
ApplicationDbContext _db;
public SysAutoIdController(ApplicationDbContext db)
{
_db = db;
}
public string getDbSize()
{
var foo = _db.SysautoId.FromSqlRaw("" +
" SELECT a.dbdisk " +
" FROM " +
"(SELECT sys.databases.name AS dbname, " +
" CONVERT(VARCHAR, SUM(SIZE) * 8 / 1024) + \' MB\' AS dbdisk " +
" FROM sys.databases " +
" JOIN sys.master_files ON sys.databases.database_id = sys.master_files.database_id " +
" GROUP BY sys.databases.name) a " +
" WHERE a.dbname = \'mydatabase\' ");
return foo.ToString();
}
}
(Действительно, raw SQL не работает, пробовал простым запросом, исправлю позже.)
(2) Я не вставляю контроллер в Startup.cs
//services.AddSingleton<SysAutoIdController>(); // Important: must comment.
(3) В файле razor
@page "/system_information"
@using myproj.Forms
@using myproj.DTO
@using myproj.Models
@inject myproj.Data.ApplicationDbContext dbContext;
@*@inject myproj.Controllers.CommonController commonController;*@ @*must comment*@
Database size: @fooTemp
@code {
string fooTemp;
protected override async Task OnInitializedAsync()
{
myproj.Controllers.CommonController Cc = new Controllers.CommonController(dbContext);
// see if you can make getDbSize async, that would be better
fooTemp = Cc.getDbSize();
}
}
Тогда работает!
На самом деле, я не очень понимаю проблему , почему это работает, кто-нибудь может оставить комментарий или ответить для меня подробнее.