如何在 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)