这只是 GraphQL 的冰山一角,使用它还有更多我将要向您展示的内容。只是想把它作为免责声明。
使用 GraphQL 时,您有一个继承自 ObjectGraphType 的 Query 对象和一个继承自的 Schema 对象,以实现您的自定义查询、订阅和突变。
这些示例用于处理管理员问题的服务,这就是为什么您会经常看到“管理员”一词的原因。
这个实现的核心是一个继承自 ObjectGraphType 的对象:
public class AdminQuery : ObjectGraphType
{
public AdminQuery(IServiceProvider sp)
{
///Used to retrieve a list of users
Field<ListGraphType<UserType>>()
.Name("users")
.Description(nameof(User))
.ResolveAsync(
async context
=> await sp.GetAsync<User>()); ////This is the extension method defined below
}
}
///GraphQL object that represents the User object
///Since there were numerous data models I created an abstract class
///to offload some of the boiler plate code
public class UserType : IdentityDataTypeBase<User>
{
public UserType(IServiceProvider sp) : base()
{
///This allows access to the properties of the User class
///The second parameter determines whether to allow null
Field(c => c.Name, true);
Field(c => c.Email, true);
Field(c => c.FirstName, true);
Field(c => c.LastName, true);
Field(c => c.UserName, true);
}
}
///Abstract class that handles Identity Models being queried
public abstract class IdentityDataTypeBase<T> : ObjectGraphType<T> where T : IdentityBase
{
public IdentityDataTypeBase()
{
Field(c => c.Id, false)
.Name(///Name of your property)
.Description(///Description of the property);
}
}
///Extension method defined to simplify data access
public static Task<IEnumerable<T>> GetAsync<T>(this IServiceProvider sp)
{
///if you use IRepository<T>
var repo = sp.GetRequiredService<IRepository<T>>();
///if you want to directly us the DbContext
var repo = sp.GetRequiredService<DbContext>();
///Use the instance of whichever to retrive the object from the database
}
此示例希望表明您只需要访问您正在查询的数据模型以及您将用于访问该数据的数据存储。