我正在Razor Pages .NET Core 2.2页面上显示数据。它只允许我一次引用数据库上下文,如果尝试从其他表中获取值,则会给我一个错误。
这是我每次基于表进行操作时通过我的应用程序都能正常工作的原因。
public class DetailsModel : PageModel
{
private readonly OESAC.Models.MyDbContext _context;
public DetailsModel(OESAC.Models.MyDbContext context)
{
_context = context;
}
public OESAC.Models.Courses_New Courses_New { get; set; }
public async Task<IActionResult> OnGetAsync(int? id)
{
ViewData["ThisID"] = id;
if (id == null)
{
return NotFound();
}
Courses_New = await _context.Courses_New.FirstOrDefaultAsync(m => m.NewCourseTempID == id)
下面,当我尝试访问同一页面/类中的另一个表时,我得到带下划线的名称“ DocsForThisCourseModel”,错误是“方法必须具有返回类型”:
private readonly OESAC.Models.MyDbContext _context;
public DocsForThisCourseModel(OESAC.Models.MyDbContext context)
{
_context = context;
}
我有种感觉,我可以更改整个系统以使用控制器和视图,但是相反,我对使用System.Data.SqlClient非常熟悉,我只是运行了一个查询以获取行数,如下所示:
using (SqlConnection con = new SqlConnection("Data Source=Txx\\SQL20xx4;Initial Catalog=xxx;User ID=xxx;Password=xxx;Persist Security Info=true"))
{
string sql = "SELECT Count(Course_NewID) As ExistingCourses FROM DocsForThisCourse WHERE Course_NewID =@id";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@id", id);
con.Open();
int count = Convert.ToInt32(cmd.ExecuteScalar());
con.Close();
//HIDE "SEE DOCUMENTS" BUTTON BECAUSE THERE ARE NO DOCUMENTS
if (count==0)
{
ViewData["HasDocs"] = "no";
}
else
{
ViewData["HasDocs"] = "yes";
}
}
这一切都可行,我在几个地方都这样做了,因为尝试运行2个查询时Razor Page似乎受到限制。我的困境是我似乎在我的appsettings.json文件中没有获得对“ DefaultConnection”的引用。所以我只复制了字符串,并在需要时在代码中使用它。
我已经尝试过,但无济于事。
var connString = Configuration.GetConnectionString("DefaultConnection");
我想,一旦我可以从appsettings.json中获得连接字符串,我会比对它进行硬编码要安全一些。