C# 为什么在我的实体模型类中添加一个无参数构造函数在这里起作用?这意味着什么?
所以我有一个office实体类: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
[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()
{
}