Tag: odata

包含WebAPI OData请求的相关实体

有没有办法在OData请求中包含相关实体? 例如,我有一个Person实体和一个Task实体。 这种关系是一对多的,一个人有很多任务。 如果我使用OData请求查询数据: /odata/Person 为了获取所有Person实体,返回的json不包含每个Person的Tasks属性。 但是,如果我使用OData请求查询数据: /odata/Person(14)/Tasks 我得到属于该Person的任务集合。 我希望能够做的是在我发出/ odata / Person请求时获取所有Person实体的所有任务。

OData中实体的别名/重命名属性

使用ODataConventionModelBuilder及其EntitySetfunction,是否可以重命名实体集上的属性名称? 假设我有一个实体集类型, Foo 。 它有两个属性, Bar和Baz 。 但是,在我的OData模型中,我希望这些属性分别命名为Jack和Jane 。 我可以这样做吗? 我希望这样的事情: var builder = new ODataConventionModelBuilder { Namespace = “Blah” }; var foo = builder.EntitySet(“Foo”); foo.AliasProperty(f => f.Bar, “Jack”); foo.AliasProperty(f => f.Baz, “Jane”); 到目前为止,我一直无法找到这样做的东西。

如何使用Breeze与通用工作单元和存储库?

使用这个: https://genericunitofworkandrepositories.codeplex.com/ 和以下一组博客文章: http://blog.longle.net/2013/05/11/genericizing-the-unit-of-work-pattern-repository-pattern-with-entity-framework-in-mvc/ 我们正在尝试将这些存储库与Breeze一起使用,因为它可以很好地处理客户端javascript和OData。 我想知道我们如何使用这些与Breeze来正确处理覆盖BeforeSaveEntity 。 我们在保存期间需要发生相当多的业务逻辑(修改像ModifiedBy , ModifiedTime , CreatedBy等属性)但是当我们更改它们时它们不会被微风更新,所以我们必须在保存后重新查询(我们已经尝试手动映射更改,但它要求我们复制所有业务逻辑)。 我们的第二个选择是检查每个entity的类型,然后为它请求正确的存储库,在内部处理保存,然后在客户端上执行新的get请求以获取更新的信息。 这很健谈,所以我们希望有更好的方法。 在绕过breeze的保存而不返回错误或之后必须重新获取数据的情况下更新这些对象的正确方法是什么? 保存期间Breeze with Business Logic的任何示例都非常有用,特别是如果它直接在BeforeSaveEntity方法中发生在服务,存储库或其他内容中。

exception消息是On数据上下文类型,有一个顶级IQueryable属性,其元素类型不是实体类型

我建立了我在IIS 7中托管的WCFDataService,我将使用Reflection Provider作为数据源提供程序。 我的示例工作,如果我将实体类型定义保持在我定义服务的同一个程序集中,但是如果我将实体类型移动到另一个引用的程序集并且出现以下错误则不起作用 “服务器遇到处理请求的错误。exception消息是’在数据上下文类型’EntityContainer’,有一个顶级IQueryable属性’Cats’,其元素类型不是实体类型” 服务 public class WcfDataService1 : DataService { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule(“Cats”, EntitySetRights.AllRead); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; } } 实体容器 public class EntityContainer { public IQueryable Cats { get { var s = new List(); var c1 = new Cat {Id = 1, Name = “Fufi”}; var c2 = […]

在OData WebApi Url中传递参数

使用Web Api我有一个OData EndPoint,可以从数据库返回产品。 我有多个具有相似模式的数据库,并希望在URL中传递一个参数来识别Api应该使用哪个数据库。 当前的Odata终点: HTTP://本地主机:62999 /产品 我想要的是: http:// localhost:62999/999 /产品 在新的Url中,我传入了999(数据库ID)。 数据库ID用于指定从中加载产品的数据库。 例如localhost:62999/999/Products(‘ABC123′)将从数据库999加载产品’ABC123’,但是下一个请求localhost:62999/111/Products(‘XYZ789′)将从数据库加载产品’XYZ789′ 111。 下面的Url有效,但我不喜欢它。 localhost:62999/Products(‘XYZ789’)?database=111 这是控制器的代码: public class ProductsController : ErpApiController //extends ODataController, handles disposing of database resources { public ProductsController(IErpService erpService) : base(erpService) { } [EnableQuery(PageSize = 50)] public IQueryable Get(ODataQueryOptions queryOptions) { return ErpService.Products(queryOptions); } [EnableQuery] public SingleResult Get([FromODataUri] string key, […]

ODatafilter和Guid字段的问题

我正在尝试使用OData获取一些代码。 以下代码似乎不起作用。 ds是OpenDataServiceProxy。 adapterTypeId是Guid的字符串表示forms。 adapterName是一个字符串名称 ds.query(‘/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\” + adapterTypeId + ‘\’) and Name eq \” + adapterName + ‘\”, ifmgr_CreateAdapter_Step1, onGenericFailure, ‘Error’); 上面的行给出以下错误: 预期在位置0处的类型’System.Boolean’的表达式。 如果我删除filter的Guid部分,使它只是使用“名称”部分,它工作正常。 DataAdapters表字段“DataAdapterTypeId”外键地键入“DataAdapterTypes”表DataAdapterTypeId字段。 谁能发现我做错了什么? – – – – – – – – – -编辑 – – – – – – – – – – – 好的,我已经更改filter,如下所示。 我不再收到错误但得到很多结果,而不是一个匹配filter的记录。 任何人都可以说为什么它不过滤? ds.query(‘/DataAdapters?($filter=Name eq \” […]

config.MapODataServiceRoute错误

我目前正在关注本指南 – > 链接到asp.net网站 正如指南所说,我通过nuget控制台添加了所有必需的软件包,并将必要的使用添加到WebApIConfig文件中。 。 但是当我添加端点寄存器方法VS给了我一个错误。 我添加的方法: public static void Register(HttpConfiguration config) { // New code: ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet(“Products”); config.MapODataServiceRoute( routeName: “ODataRoute”, routePrefix: null, model: builder.GetEdmModel()); } 错误VS给了我: Error 1 ‘System.Web.Http.HttpConfiguration’ does not contain a definition for ‘MapODataServiceRoute’ and no extension method ‘MapODataServiceRoute’ accepting a first argument of type ‘System.Web.Http.HttpConfiguration’ could […]

使用linq在OData服务中交替连接

我想在LINQ中加入两个表,我的查询有点像 SELECT mfg.MfgName FROM MasterProductStaging AS mps INNER JOIN Mfg AS mfg ON mps.MfgID = mfg.MfgID WHERE (mps.MasterProductStagingID = 345345) 现在在LINQ中,我使用两个不同的查询来解决这个问题 var test = (from d in DataContext.MasterProductStagings where d.MasterProductStagingID == Convert.ToInt32(Request.QueryString[“MPSID”]) select d.MfgID).FirstOrDefault(); var data = (from d in DataContext.Mfgs where d.MfgID == test.ToString() select d).FirstOrDefault(); 这些表在emdx模型中没有任何关系。 现在我在一个查询中获取所需的数据。

C# – OData:无法使用带有’new’属性的Type构建System.Web.Http.OData.Delta

我在ASP.NET Web API 2(而不是Core)中运行一个项目,我有一个像这样的对象: public class Desktop : EntityData { public Desktop() { } public new Guid Id { get { return Guid.Parse(base.Id); } set { base.Id = value.ToString(); } } … } public abstract class EntityData { protected EntityData(); public string Id { get; set; } public bool Deleted { get; set; } } […]

结合多个Linq表达式

我正在重构一些代码,试图让它更自我记录。 当前代码对OData服务进行查询,如下所示: return context.MessageLog.Where ( x => ( x.Status == MessageStatus.Success || x.Status == MessageStatus.Failure ) && x.Direction == MessageDirection.Inbound && x.ResponseDate == new DateTimeOffset(new DateTime(1900, 01, 01)) ); 我希望改变它以使用Linq Expressions。 我可以将所有逻辑移动到单个表达式中,并使代码运行context.MessageLog.Where(MessageIsPendingResponse); 。 但是,我想为不同的条件创建表达式: MessageIsProcessed (即现在处于成功或失败状态), MessageIsInbound和ResponseNotYetSent (响应日期为null)。 我可以将这些与多个where语句结合起来,如下所示: return context.MessageLog .Where(MessageLogExpression.MessageIsProcessed) .Where(MessageLogExpression.MessageIsInbound) .Where(MessageLogExpression.ResponseNotYetSent); ( MessageLogExpression是我用来包含这些预定义表达式的类)。 问题1 这是组合声明的最佳方式,还是首先冒险过滤错误的字段(例如,Linq是否将所有条件合并到一个查询中并允许查询引擎(以SQL术语)确定最佳执行计划;或者我们是否强制它首先在状态字段中过滤? 问题2 以上内容适用于我们有AND加入表达式的场景; 但我们怎么做OR呢? 我假设有一些方法来组合这些,但找不到任何明显的东西。 我怀疑这样的事情存在吗? return context.MessageLog.Where(new […]