如何在 OData 请求中添加 Context Guid

Posted

技术标签:

【中文标题】如何在 OData 请求中添加 Context Guid【英文标题】:How to add Context Guid in OData request 【发布时间】:2019-12-26 07:12:28 【问题描述】:

我有助手类,每个上下文都在此基础上创建。上下文列表中添加的每个上下文:

 public static class Helper
 
    public const string CONNECTION_STRING = @"Server=(localdb)\MSSQLLocalDB;Database=MyApp;Trusted_Connection=True;";
    public static MainContext CreateContext()
    
        DbContextOptionsBuilder<MainContext> optionsBuilder = new DbContextOptionsBuilder<MainContext>().UseSqlServer(CONNECTION_STRING);
        var context = new MainContext(optionsBuilder.Options)  ContextId = Guid.NewGuid() ;
        Contexts.Add(context);
        return context;
    
    public static List<MainContext> Contexts  get; set;  = new List<MainContext>();
 

我有编辑Product名称的操作:

    public ViewResult EditProduct(string name, string newName)
    
        var products = Context.GetEntities<Product>().Where(a => a.Name == name);
        foreach (var product in products)
        
            product.Name = newName;
        
        return View(products);
    

另外,我有OData 服务:

 public IHttpActionResult Get(ODataQueryOptions<Product> queryOptions, CancellationToken cancellationToken)
 
        Context = GetContext();
        if (Context == null)
        
            Context = Helper.CreateContext();
        
        var products = Context.GetEntities<Product>();
        return Ok(products);
 

这是用例: 假设我们在 DB 中有“Candy”产品。我运行 EditProduct 操作并将名称更改为“COKE”。如您所见,我没有在此操作中保存上下文。当我从 OData 得到它时,产品名称仍然是“Candy”。这是因为没有保存上下文。我希望能够使用 OData 中的现有上下文。这就是我创建 GetContext 方法的原因。现在我的 OData 请求是 https://localhost:44326/Products。如何在此请求中放入上下文 Guid 并从 GetContext 方法中的 Helper.Contexts 列表中获取上下文?

【问题讨论】:

【参考方案1】:

您可以为其创建新路线:

public IHttpActionResult GetProductsFromContext(Guid contextId)
    
        var context=Helper.Contexts.FirstOrDefault(c=>c.Id==contextId);
        if(context==null) throw new Exception($"Context with contextId was not found");
        var products=context.GetEntities<Product>();
        return OK(products);
    

【讨论】:

以上是关于如何在 OData 请求中添加 Context Guid的主要内容,如果未能解决你的问题,请参考以下文章

我们可以使用OData客户端为syncfusion网格创建我们的请求但是使用正常响应(Reqular WebAPI)

如何在 C# 操作中读取 OData URL 参数值?

如何对来自 PowerQuery 的 OData 中的大型数据集的请求进行分页?

如何安全地使用 MVC WebAPI OData 端点?

如何在 odata 中启用 CORS?

如何使用 AutoMapper 将 json 请求 dto 中的 OData 枚举字符串映射到实体枚举属性