Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用默认字段创建模型_C#_Asp.net Mvc - Fatal编程技术网

C# 使用默认字段创建模型

C# 使用默认字段创建模型,c#,asp.net-mvc,C#,Asp.net Mvc,我有这个车辆模型,当我第一次创建对象并将其添加到数据库时,我想为我的字段设置一些默认值。问题是这个构造函数被调用了好几次,而不仅仅是在创建Vehicle对象时。 我做错了什么?我应该使用另一种方法创建带有默认字段的模型吗 public class Vehicle { [Key] public int VehicleId { get; set; } public bool Validated { get; set; } public DateTime Creat

我有这个车辆模型,当我第一次创建对象并将其添加到数据库时,我想为我的字段设置一些默认值。问题是这个构造函数被调用了好几次,而不仅仅是在创建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.Findid;在我看来,车辆构造函数被调用,这不是我想要的。我只希望在第一次在系统中创建对象时调用构造函数,然后再将其插入数据库

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

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

当EF Core创建这些类型的实例时,例如为结果 对于查询,它将首先调用默认的无参数构造函数 然后将每个属性设置为数据库中的值。然而,如果 EF Core查找具有参数名和 与映射属性匹配的类型,则它将调用 参数化构造函数,其中包含这些属性的值和 不会显式设置每个属性


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

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

默认构造函数(自动生成的构造函数或您编写的构造函数)将始终被调用,但如果它“不做任何事情”,那么当EF创建一个构造函数时,它将不会影响任何事情。

初始化对象时,只会调用一次构造函数。如果您看到它被多次调用,那是因为正在创建多个对象。我只想在第一次创建对象时,在插入数据库之前定义默认字段。当我在创建后从数据库中获取它时,我不希望调用构造函数。无论对象是如何创建的,在创建对象时都会调用构造函数。如果您不想要默认值,那么不要将它们放入构造函数中。还有其他选项非默认构造函数、对象初始化等。当您说多次调用构造函数时,您观察到的实际问题是什么?这里是否存在可观察到的问题?每次我调用db.Vehicles.Findid;在我看来,车辆构造函数是被调用的,是的,这就是C和大多数OOP语言的工作方式。事实上,这只不过是在构造函数版本上提供了语法上的糖分。@Neil,或者你是说这是以他以前的方式编译的?我确实不知道。我没有检查IL,但结果是一样的。有可能一种方法的效率比另一种方法稍微高一点,但我敢打赌它的效率不高。@Neil wow猜猜看,它的编译效果肯定是完全一样的。唯一的区别是在使用默认属性语法时,它还添加了对base..ctor的调用。非常酷的东西。他说他不想要DbContext.Find调用他的构造函数。DbContext.Find总是调用默认构造函数。如果他没有声明一个或它是空的,那么它没有任何作用,所以应该没关系。是的,我同意,我只是想知道他的问题是否比他原来的问题更大。这就是我想要的,很多。很抱歉,我刚刚在学习如何使用这个框架。如果你使用这种方法,一定要小心——你正在与EF和C的工作方式作斗争。也许更重要的是,您必须确保您不会从代码中的多个位置创建车辆实例-如果您决定更改默认值,可能会导致问题,等等。