Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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#_Entity Framework_Generics_Constructor - Fatal编程技术网

C# 为什么在我的实体模型类中添加一个无参数构造函数在这里起作用?这意味着什么?

C# 为什么在我的实体模型类中添加一个无参数构造函数在这里起作用?这意味着什么?,c#,entity-framework,generics,constructor,C#,Entity Framework,Generics,Constructor,所以我有一个office实体类: [Table("office_entity")] public class EFOffice : EFBusinessEntity { [Column("address")] [StringLength(250)] public string Address { get; set; } [Column("business_name")] [StringLength(150)] public string Bus

所以我有一个office实体类:

[Table("office_entity")]
public class EFOffice : EFBusinessEntity
{

    [Column("address")]
    [StringLength(250)]
    public string Address { get; set; }

    [Column("business_name")]
    [StringLength(150)]
    public string BusinessName { get; set; }

    public virtual ICollection<EFEmployee> Employees { get; set; }

    public EFOffice(Guid id, Guid tenantId, string address, string businessName)
    {
        this.Id = id;
        this.TenantId = tenantId;
        this.Address = address;
        this.BusinessName = businessName;
    }
}
测试应该通过,因为我之前已经插入了InitializeOffice1()返回的office。但是,我得到以下错误:

System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.InvalidOperationException:类“Models.Employees.EF.eOffice”没有无参数构造函数

然后我将其添加到顶部显示的eOffice类中:

private EFOffice()
{

}

出于某种原因,测试现在通过了。有人能解释发生了什么事吗?有一个无参数的构造函数会有坏的副作用吗?重要的是,我插入的每个办公室都有一个id、一个租户id、一个地址和一个业务名称,如顶部构造函数中所列。

所有链接到EntityFramework的实体都必须有一个默认构造函数

当实体框架从数据库查询映射到实体时,使用默认构造函数实例化实体的新实例,用从数据库检索的数据填充它

如果您没有默认的构造函数,实体框架就不知道如何创建它的实例,并抛出异常

类“Models.Employees.EF.EFOffice”没有无参数构造函数


试图从无参数构造函数创建对象的代码是什么?很明显,你所展示的代码并没有试图去做,但是它在别处调用了一些代码。有趣的是,我不知道。因此,我可能应该对所有其他实体类执行相同的操作。谢谢@Drew,是的,所有其他实体类都需要它。它必须是公共的或受保护的。我只是在谷歌上搜索一下,似乎有可能有私有构造函数。但要小心,这似乎有副作用。如果你想把你的网站建设成公共网站,那么就设置为protectedShort,简单明了,但是通过谷歌很难找到这个答案
public void TestExists1()
{
    InitializeDatabase();
    EFOffice testOffice = InitializeOffice1();
    Debug.Assert(EFRepo.Exists<EFOffice>(testOffice.Id));
}
private EFOffice InitializeOffice1()
{
    EFOffice newOffice = new EFOffice(SparkTest.TestGuid1, SparkTest.TestGuid2, "Generic Address", "HQ");
    return newOffice;
}
private EFOffice()
{

}