gpt4 book ai didi

c# - 为什么向我的实体模型类添加无参数构造函数在这里起作用?有什么影响?

转载 作者:太空狗 更新时间:2023-10-29 21:08:28 27 4
gpt4 key购买 nike

所以我有这个 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;
}
}

我正在实现一个通用存储库,我刚刚添加了这个方法来检查存储库中是否已经存在一个实体:

public bool Exists<TEntity>(Guid key) where TEntity : class, IBusinessEntity
{
return (_context.Set<TEntity>().Find(key) != null);
}

然后我写了如下测试代码:

public void TestExists1()
{
InitializeDatabase();
EFOffice testOffice = InitializeOffice1();
Debug.Assert(EFRepo.Exists<EFOffice>(testOffice.Id));
}

InitializeOffice1()方法如下:

private EFOffice InitializeOffice1()
{
EFOffice newOffice = new EFOffice(SparkTest.TestGuid1, SparkTest.TestGuid2, "Generic Address", "HQ");
return newOffice;
}

测试应该会通过,因为我之前已经插入了 InitializeOffice1() 返回的办公室。但是,我收到以下错误:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: The class 'Models.Employees.EF.EFOffice' has no parameterless constructor.

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

private EFOffice()
{

}

出于某种原因,测试现在通过了。任何人都可以解释发生了什么事吗?使用无参数构造函数会产生不良副作用吗?重要的是,我插入的每个办公室都有一个 id、一个 tenantId、一个地址和一个 businessName,如顶部构造函数中所列。

最佳答案

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

当 Entity Framework 从数据库查询映射到您的实体时,使用默认构造函数来实例化您的实体的新实例,以使用从您的数据库检索到的数据填充它。

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

The class 'Models.Employees.EF.EFOffice' has no parameterless constructor.

关于c# - 为什么向我的实体模型类添加无参数构造函数在这里起作用?有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com