使用默认字段创建模型

时间:2018-09-01 19:20:28

标签: c# asp.net-mvc

我有这个车辆模型,当我第一次创建对象并将其添加到数据库时,我想为字段提供一些默认值。问题在于,多次调用此构造函数,而不仅仅是在创建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);在我看来,调用了Vehicle构造函数,这不是我想要的。我只希望在将构造函数插入数据库之前第一次在系统中创建该构造函数被调用

// 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);
    }

2 个答案:

答案 0 :(得分:1)

如果您想控制初始化,则可以执行以下操作:

var myVehicle = new Vehicle
{ 
   CreationTime = DateTime.Now,
   Validated = false,
};

将始终调用默认的构造函数(无论是自动生成的构造函数,还是您编写的构造函数),但是如果“不执行任何操作”,则当EF创建一个构造函数时,它将不会有任何影响。

答案 1 :(得分:0)

您的更新似乎暗示您不希望调用构造函数,我认为您无法避免。

  

当EF Core创建这些类型的实例时(例如结果)   查询时,它将首先调用默认的无参数构造函数   然后将每个属性设置为数据库中的值。但是,如果   EF Core查找带有参数名称和   类型与映射属性的类型匹配,则它将调用   具有这些属性值的参数化构造函数,以及   不会明确设置每个属性。