[英]DbContext in ResolveWith, HotChocolate GraphQL
所以我才剛剛開始,我有一個實體,它不是通過直接關系而是通過保持 EntityId 和 EntityType(Enum) 來保存來自其他實體的數據。 當我從 GraphQL 讀取這些記錄時,我希望用解析器解析一個字段,如下所示,
public class AssignmentResolver
{
public object GetEntity( Assignment assignment, AppDbContext context)
{
if(assignment.EntityType == AssignmentEntityType.PERSON)
{
return context.People.FirstOrDefault(x => x.Id == assignment.EntityId);
}
// And more checks
return null;
}
}
那我可以說
public class AssignmentQueryType: ObjectType<Assignment>
{
protected override void Configure(IObjectTypeDescriptor<Assignment> descriptor)
{
descriptor.Field("entity").ResolveWith<AssignmentResolver>(x => x.GetEntity(default!, default!));
}
}
我想知道這是正確的還是有更好的方法...我的意思是更好的方法是為此使用文檔數據庫,但現在還不是一個選擇。 我也可能不是放置 EntityType 和 EntityId 而是可以簡單地設置與其他實體的實際關系,但我想看看這種當前方式是否可行。
好吧,那很快。
我發現了我的問題。 似乎在解析器中我不能只返回 object,因為模式在讀取時應該是清晰的。
因此,如果我從解析器返回一個在所有這些實體之間共享的 viewModel,那么我們對 go 很好。
所以 GetEntity 代碼將更改為
public EntityViewModel GetEntity( Assignment assignment, [Service] AppDbContext context)
{
if(assignment.EntityType == AssignmentEntityType.PERSON)
{
var entity = context.People.FirstOrDefault(x => x.Id == assignment.EntityId);
return new EntityViewModel(entity);
}
// And more checks
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.