通过 API 方法请求时从 Entity Framework 获取整个对象时出现问题
Problem getting the whole object from Entity Framework when requesting via API methods
我对 API 请求有疑问。我正在尝试将整个对象从服务器获取到客户端,它已被检索,但没有一些字段。
This is what it should get for job object, but the problem is that it is returned with null values: see photo-1
我提到那个成年人有那个特定的工作:see photo-2
我还尝试重建迁移、数据库,或者也尝试为对象拥有的所有内容添加一个 DbSet,但什么都没有。
遇到这个问题,我无法更新或删除对象。
应该是什么?
您需要为成人和 Job/JobTitle class 添加实体 class 定义。原因很可能是您没有在两者之间正确映射多对一关系,或者您禁用了延迟加载并做了类似的事情:
public class Adult
{
// ....
public Job JobTitle { get; set; } = new Job();
}
这会看到 EF 加载 Adult 但初始化为空职位。您应该只初始化一对多集合。
可以通过 DbContext OnModelCreating 中的 Attribute、EntityTypeConfiguration 或 modelBuilder 完成映射。根据您的模型假设,它应该类似于:
public class Adult
{
[Key]
public int Id { get; set; }
// Other properties...
[ForeignKey("JobTitleIdJob")]
public virtual Job JobTitle { get; set; }
}
public class Job
{
[Key]
public int IdJob { get; set; }
public string JobTitle { get; set; }
}
上面JobTitle的FK使用了shadow 属性,也可以在Adult中定义FK字段,但是需要显式映射FK关系,因为列名不符合命名类型的约定。 (即 JobId 或 Job_Id)
如果您的关系设置正确,则可以在加载成人时预先加载职位。
var adult = context.Adults
.Include(x => x.Job)
.Single(x => x.Id == adultId);
我对 API 请求有疑问。我正在尝试将整个对象从服务器获取到客户端,它已被检索,但没有一些字段。
This is what it should get for job object, but the problem is that it is returned with null values: see photo-1
我提到那个成年人有那个特定的工作:see photo-2
我还尝试重建迁移、数据库,或者也尝试为对象拥有的所有内容添加一个 DbSet,但什么都没有。
遇到这个问题,我无法更新或删除对象。
应该是什么?
您需要为成人和 Job/JobTitle class 添加实体 class 定义。原因很可能是您没有在两者之间正确映射多对一关系,或者您禁用了延迟加载并做了类似的事情:
public class Adult
{
// ....
public Job JobTitle { get; set; } = new Job();
}
这会看到 EF 加载 Adult 但初始化为空职位。您应该只初始化一对多集合。
可以通过 DbContext OnModelCreating 中的 Attribute、EntityTypeConfiguration 或 modelBuilder 完成映射。根据您的模型假设,它应该类似于:
public class Adult
{
[Key]
public int Id { get; set; }
// Other properties...
[ForeignKey("JobTitleIdJob")]
public virtual Job JobTitle { get; set; }
}
public class Job
{
[Key]
public int IdJob { get; set; }
public string JobTitle { get; set; }
}
上面JobTitle的FK使用了shadow 属性,也可以在Adult中定义FK字段,但是需要显式映射FK关系,因为列名不符合命名类型的约定。 (即 JobId 或 Job_Id)
如果您的关系设置正确,则可以在加载成人时预先加载职位。
var adult = context.Adults
.Include(x => x.Job)
.Single(x => x.Id == adultId);