public class RegisterViewModel{
public RegisterViewModel()
{
MaxDepartmentLevel = db.Settings.Find(1).MaxDepartmentLevel;
}
private ApplicationDbContext db = new ApplicationDbContext();
public int MaxDepartmentLevel { get; set; }
}
这样安全吗?是否可以保证在行
之前初始化db
MaxDepartmentLevel = db.Settings.Find(1).MaxDepartmentLevel;
跑吗?
换句话说,具有字段初始化和构造函数的类的执行顺序是什么?
答案 0 :(得分:1)
简短回答:是的,您的“db”字段将始终在构造函数之前初始化(假设没有继承)。
长答案:在构造函数中执行数据库调用(几乎)绝不是一个好主意。构造函数应该只“构造”类,而不是执行它的操作。我会改变你的代码
public class RegisterViewModel{
private ApplicationDbContext db;
public RegisterViewModel()
{
db = new ApplicationDbContext();
}
public int QueryMaxDepartmentLevel => db.Settings.Find(1).MaxDepartmentLevel;
}
它可以控制数据库查询的执行时间:)
答案 1 :(得分:0)
任何构造函数都会调用父构造函数,然后在执行代码之前初始化成员变量。因此代码可以工作。
初始化顺序通常是:
this()
调用this()
调用的情况下跳过)请参阅https://msdn.microsoft.com/en-us/library/aa645606(v=vs.71).aspx