Создание модели с полями по умолчанию - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть эта модель транспортного средства, и я хочу иметь некоторые значения по умолчанию для моего поля, когда я впервые создаю объект и добавляю его в базу данных. Проблема в том, что этот конструктор вызывается несколько раз, а не только при создании объекта 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 голосов
/ 01 сентября 2018

Если вы хотите контролировать инициализацию, вы можете сделать что-то вроде этого:

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

Конструктор по умолчанию (либо сгенерированный автоматически, либо созданный вами) всегда будет вызываться, но если он ничего не делает, то когда EF его создаст, он не повлияет на что-либо.

0 голосов
/ 01 сентября 2018

Похоже, ваше обновление подразумевает, что вы не хотите, чтобы конструктор вызывался, чего, я не думаю, вы сможете избежать.

Когда EF Core создает экземпляры этих типов, например, для результатов запроса сначала вызовет конструктор по умолчанию без параметров а затем установите для каждого свойства значение из базы данных. Однако если EF Core находит параметризованный конструктор с именами параметров и типы, которые соответствуют сопоставленным свойствам, вместо этого он будет вызывать параметризованный конструктор со значениями для этих свойств и не будет устанавливать каждое свойство явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...