我有这个车辆模型,我想在我第一次创建对象并将其添加到数据库时为我的字段设置一些默认值。问题是这个构造函数被多次调用,而不仅仅是在Vehicle对象的创建中。我究竟做错了什么?我应该使用其他方法来创建具有默认字段的模型吗?
public class Vehicle
{
[Key]
public int VehicleId { get; set; }
public bool Validated { get; set; }
public DateTime CreationTime { get; set; }
public Vehicle()
{
this.CreationTime = DateTime.Now;
this.Validated = false;
}
}
编辑:每次调用db.Vehicles.Find(id);在我看来,Car构造函数被调用,这不是我想要的。在插入数据库之前,我只希望在系统中第一次创建对象时调用构造函数
// GET: Vehicles/Edit/5
public ActionResult Edit(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Vehicle vehicle = db.Vehicles.Find(id);
if (vehicle == null)
{
return HttpNotFound();
}
return View(vehicle);
}
如果你想控制初始化,那么你可以这样做:
var myVehicle = new Vehicle
{
CreationTime = DateTime.Now,
Validated = false,
};
将始终调用默认构造函数(自动生成的构造函数或您编写的构造函数),但如果它“无”,那么当EF创建一个构造函数时,它不会影响任何东西。
您的更新似乎意味着您不希望调用构造函数,我认为您无法避免。
当EF Core创建这些类型的实例时,例如查询结果,它将首先调用默认的无参数构造函数,然后将每个属性设置为数据库中的值。但是,如果EF Core找到参数名称和类型与映射属性匹配的参数化构造函数,则它将使用这些属性的值调用参数化构造函数,并且不会显式设置每个属性。