Training
Learning path
Implement finance and operations apps - Training
Plan and design your project methodology to successfully implement finance and operations apps with FastTrack services, data management and more.
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Breaking changes it the library fall into one of four categories:
We will get better writer performance across the board.
This feature will substantially increase extensibility, like allowing customers to replace entire components such as the UriPathParser
with their own implementation. Introducing DI make it much easier to use the same reader/writer settings across the board.
There was a lot of vestigial code left around from the OData v1-3 days that we’ve removed.
Most of our API improvements fall into the category of namespace simplifications or updating verbiage. The single most impactful change that we made was deciding to merge entity type and complex type in ODataLib. We did this because complex type and entity type are becoming more and more similar in the protocol, but we continue to pay overhead to make things work for both of them.
*** Improvements***
*** Fixed Bugs***
Features
Improvements
Fixed Bugs
Features
Improvements
Fixed Bugs
Improvements
Fixed bugs
Fixed Bugs
Fixed Bugs
Fixed Bugs
ClientEdmModel.GetOrCreateEdmType
in #2533ArgumentException
in ProjectPlanCompiler
caused by missing materializerContext
argument in dynamic calls in #2535matchesPattern
support in #2519Fixed Bugs
NullReferenceException
thrown by URI parsers when filtering by unknown property in #2496ToJson
function of ODataErrorDetail to deal with escaped strings in #2511Improvements
Fixed Bugs
[#2487] Fixed bug in LoadProperty
for complex properties and complex collection properties
[#2497] Fixed bug causing JSON batch responses in WebAPI to be written out of order when using DefaultStreamBasedJsonWriterFactory
.
Improvements
[#2489] Perf improvement in the internal ODataPath
cloning constructor.
[#2506] Reduce memory usage in OData Client by eliminating static ConditionalWeakTable
.
Features
[#2466] Implement ODataUtf8JsonWriter
async API
[#2157] Add extension method to get all navigation property bindings: GetNavigationPropertyBindings(this IEdmEntityContainer container)
[#2470] Add support for Core.AlternateKeys
Features
[2425] Make ODataPathExtensions
public
[2416] Create Utf8JsonWriter
-based implementation of IJsonWriter
and introduced IStreamBasedJsonWriterFactory
interfaces
[1925] Add support for $apply/groupby
in OData Client
Fixed Bugs
[2461] Fix DisposeAsync
implementation for .NET Core 3.1 and higher
[2459] Fix issues causing synchronous I/O to occur in asynchronous code. This was in turn causing exceptions when using Kestrel web server which by default does not allow synchronous I/O.
Features
[#2431] Allow user to provide HttpClientHandler instance in OData Client
Fixed Bugs
N/A
Improvements
N/A
Features
N/A
Fixed Bugs
N/A
Improvements
[#2407] Encode special chars in array elements in Contains expression
Features
[#2267] Implement asynchronous support in ODataJsonLightDeserializer, ODataJsonLightPropertyAndValueDeserializer and ODataJsonLightResourceDeserializer
[#2301] Implement asynchronous support in ODataJsonLightEntityReferenceLinkDeserializer
[#2305] Implement asynchronous support in ODataJsonLightErrorDeserializer
[#2306] Implement asynchronous support ODataJsonLightCollectionDeserializer
[#2308] Implement asynchronous support in ODataJsonLightPayloadKindDetectionDeserializer
[#2311] Implement asynchronous support in ODataJsonLightParameterDeserializer
[#2316] Implement asynchronous support in ReorderingJsonReader
[#2322] Implement asynchronous support in ODataJsonLightServiceDocumentDeserializer
[#2324] Implement asynchronous support in ODataNotificationReader
[#2327] Implement asynchronous support in ODataJsonLightCollectionReader
[#2335] Implement asynchronous support in ODataJsonLightReader
[#2351] Implement asynchronous support in ODataJsonLightDeltaReader
[#2353] Implement asynchronous support in ODataJsonLightParameterReader
[#2359] Implement asynchronous support in ODataJsonLightBatchReader
[#2364] Implement asynchronous support in ODataRawInputContext
Fixed Bugs
[#2299] fix filter using in operator with open types
[#2300] Fix cast in expand
[#2313] #1208 Support relative context URI starting with "$metadata"
[#2341] Validate key not defined multiple times in type hierarchy
[#2346] Set default scale to null
Improvements
[#2222] Replaced the AsyncBufferedStream with a simple BufferedStream
[#2303] Bump System.Text.RegularExpressions
[#2304] Bump System.Net.Http
[#2328] Add DuplicatePropertyNameChecker to ObjectPool
[#2363] Avoid zero-length array allocations
[#2366] ODataJsonLightCollectionReader improvements to reduce delegate allocations
[#2367] Fix unnecessary delegate allocations across OData writers
Features
[#2248] Implement asynchronous support in JsonReaderExtensions
[#2255] Implement asynchronous support in ODataJsonReaderCoreUtils
[#2264] Implement asynchronous support in BufferingJsonReader
Fixed Bugs
[#2191] Compute navigation path should return null if navigation source kind is none in context uri info
[#2216] Relative URIs for @oData.context are not supported
[#2231] Remove single quotes from the type in a cast function
[#2250] Support writing nested delta resource sets with non-delta writer
[#2257] FunctionCallBinder promotes arguments without checking return type
[#2275] Names starting with underscore must be allowed
[#2277] Should use for @type for serializing record in CSDL JSON
[#2279] Default to using entityType for incomplete serializationInfo
Improvements
[#2204] Perf: Optimize collections and enumerators
[#2215] Performance improvements
[#2247] Fix memory leak
[#2256] Refactor alternate key resolver to avoid relying on exceptions
[#2288] Cache Parent Scope
[7dcad7] Add publicapi analyzer, clean up the warnings
Features
[#2159] Update namespaces to use aliases if aliases for the namespaces are set
[#2173] EdmLib vocabulary annotation default values
[#2199] Implement asynchronous support in ODataTextStreamReader class
[#2202] Enable default value for vocabulary annotation
[#2212] Implement asynchronous support in ODataBinaryStreamReader
[#2217] Implement asynchronous support in JsonReader
[#2232] Enable property case insensitive reading
Fixed Bugs
[#2239] Add direct reference to Microsoft.Bcl.AsyncInterfaces package to fix missing reference issue observed in dependent libraries
Improvements
[#2223] Performance fix for FindAcrossModels
[Be NOTED] To support gradual introduction of asynchronous cleanup of managed resources, a dependency on Microsoft.Bcl.Interfaces was added. If you update the OData core libraries packages in your project to 7.9.1 or higher, please add Microsoft.Bcl.Interfaces package as well.
Features
N/A
Fixed Bugs
[#2130] Fix NullReferenceException thrown during materialization of lower-camel-cased payload
[#2160] Expand fully qualified type
[#2179] Fix the issue when read nested resource untyped in the request
Improvements
[#2178] Clone reader settings when creating it
[#2188] Avoid creating unused instances of ParamaterAliasValueAccessor
[#2193] Remove delegate allocation in ODataWriterCore CheckForNestedResourceInfoWithContent method
[#2197] Reduce memory allocations from closures and lambdas
[#2209] Provide option for alternative form of delete link request Uri
[#2210] Cache vocabulary annotations if model is immutable
[Be NOTED] To support gradual introduction of asynchronous cleanup of managed resources, a dependency on Microsoft.Bcl.Interfaces was added. If you update the OData core libraries packages in your project to 7.9.1 or higher, please add Microsoft.Bcl.Interfaces package as well.
Features
N/A
Fixed Bugs
[#2188] Avoid creating unused objects when calling ODataUri.Clone()
[#2179] Fix the issue when read nested resource untyped in the request
[#2178] Clone reader settings when creating it
[#2130] Fix NullReferenceException thrown during materialization of lower-camel-cased payload
Improvements
N/A
[Be NOTED] To support gradual introduction of asynchronous cleanup of managed resources, a dependency on Microsoft.Bcl.Interfaces was added. If you update the OData core libraries packages in your project to 7.9.1 or higher, please add Microsoft.Bcl.Interfaces package as well.
Features
[#2041] Remember the SelectItem instances that are thrown away because of the existence of a WildcardSelectItem
[#2059] Implement asynchronous support in ODataJsonLightCollectionWriter
[#2078] Implement asynchronous support in ODataJsonLightWriter
[#2079] Support asynchronous invocation of IODataStreamListener.StreamDisposedAsync method from ODataNotificationWriter class
[#2080] Support asynchronous invocation of IODataStreamListener.StreamDisposedAsync method from ODataNotificationStream
[#2082] Implement asynchronous support in ODataJsonLightDeltaWriter
[#2096] Implement asynchronous support for ODataJsonLightParameterWriter
[#2109] Implement asynchronous support in ODataWriteStream
[#2111] Implement asynchronous support in ODataJsonLightBatchWriter
[#2114] Implement asynchronous support in ODataJsonLightOutputContext
[#2121] Implement asynchronous support in RawValueWriter
[#2123] Fixed issue with caching of enumerable instead of list
[#2124] Implement asynchronous support in ODataAsynchronousWriter
[#2125] Implement asynchronous support in ODataRawOutputContext
[#2126] Implement asynchronous support in ODataMultipartMixedBatchWriter
[#2143] Support empty collection with IN operator
Fixed Bugs
[#2021] HttpClientRequestMessage: Fix UnwrapAggregateException
[#2072] No error message when reading an incorrect structure of a collection of entities
[#2090] Entity tracker equality comparer
[#2097] Add cancellation token to ExecuteAsync in DataServiceActionQuery and DataServiceActionQueryofT
[#2110] ODataNotificationWriter and ODataNotificationStream wrapper classes should not dispose the passed TextWriter and Stream respectively
[#2131] Fix issue with async reader for Parsing the Context Uri
[#2139] Fix escape function binding type constraint
[#2145] Allow filter in empty string
[#2155] Fix AggregateException thrown by OData writers async API
Improvements
[#2091] Setup crank for performance tests
[#2093] Consistently use CharArrayPool in JsonWriter to cut cost of initializing char arrays
[#2133] Cache annotation full qualified name in FindDeclaredVocabularyAnnotations
[#2144] Skip string allocation for keys of PropertyCache
[#2154] Skip lambda allocation in FindTransientAnnotation
[#2156] Fix string allocation performance issue for IsQualifiedName
[#2158] Avoid delegate allocations calling InterceptException
Features
[#1806] Sequencing Json Batch requests with the dependsOn property in OData Client
[#1998] Add support for $this
[#2002] Expand TextWriterWrapper abstract class with equivalent async method
[#2009] Enable EdmReference, EdmInclude vocabulary annotation
[#2014] Implement asynchronous support in JsonWriter
[#2030] Implement asynchronous support in ODataJsonLightSerializer
[#2031] Implement asynchronous support in ODataJsonWriterUtils
[#2032] Implement asynchronous support in ODataJsonLightWriterUtils
[#2038] Implement asynchronous support in JsonLightODataAnnotationWriter
[#2046] Implement asynchronous support in ODataJsonLightCollectionSerializer
[#2048] Implement asynchronous support in ODataJsonLightServiceDocumentSerializer
[#2050] Implement asynchronous support in ODataJsonLightEntityReferenceLinkSerializer
[#2051] Add support for $count segment within $expand
[#2052] Implement asynchronous support in ODataJsonLightResourceSerializer
[#2055] Add support for Singleton's in VocabularyAnnotationInaccessibleTarget
[#2058] Modify IODataOutputInStreamErrorListener interface to support asynchronous notifications when an in-stream error is to be written
[#2069] Add support for $search and $filter within $count segment of $filter collection properties
[#2075] Modify IODataStreamListener interface to support asynchronous notifications when the content stream of an operation has been disposed
Fixed Bugs
[#2017] Fix IN operator precedence
[#2018] Make sure we pass the no-dollar flag through
[#2022] Translate PathSelectItem in ODataUriExtensions.BuildUri
[#2035] Fix IN operator not working with null Guid values
[#2068] Fix issue where OData.Core lib fails to parse IN operator with Date, DateTimeOffset and Time parameters
[#2087] Translate ExpandedCountSelectItem in BuildUri
Improvements
[#1741] Convert BaseEntityType to interface
[#1992] Client Perf improvement
[#1993] Perf fixes for ODL- Linq
[#2024] Performance Fix for swallowed exception in AppendKeySegment
[#2039] Update Capabilities Vocabulary
[#2053] Elide async and await in pass-through asynchronous methods
Features
N/A
Fixed Bugs
[#2004] Fix ODataUriExtensions.BuildUri produce invalid URI
[#1987] Import vocabulary annotations declared in external referenced models
Improvements
N/A
Features
[#1995] Retrieve the content type for stream property from vocabulary annotation by convention
[#1991] Add Dollar it in BuildUri response
[#1984] Enable nullable setting for EdmUntypedTypeReference
[#1966] Add WriteMetadataAsync API to enable write CSDL async
Fixed Bugs
[#1985] Fix reading untyped collections containing values with @type specified
[#1980] Enable serialize and deseriaze the property with Untyped type
Improvements
N/A
Following are the changes done since 7.7.3.
Features
[#1868] Add IN operator support to client
[#1921] Support for $apply/aggregate
Fixed Bugs
[#1906] Make $it in filters inside select/expand reference the resource path
[#1932] Fix reading OData error at synchronous operations for .NET Core.
[#1933] Fix deserialization of decimal in exponential notation
[#1934] Fix location header missing for preflight requests
[#1939] Make AuthorizationVocabularyModel public and add MeasuresVocabularyModel
[#1942] ConvertFromUriLiteral can't work for short data type
[#1944] Fix null dynamic property materialization
[#1946] Added writer setting to add type annotations
[#1949] Key attribute with one property throws exception
[#1950] Fix the navigation property binding target path issue
[#1952] Add CoreVocabularyModel.RevisionsTerm
[#1953] Add HttpClient implementation of the DataServiceClientRequestMessage.cs
[#1957] Remove reference to ODataRuleSets file
Improvements
[#1930] Address perf issue with Appending Cast Segment
[#1954] Performance Fixes
Following are the changes done since 7.7.2.
Features
N/A
Fixed Bugs
[#1913] Enable JSON metadata reader, writer in OData Core
[#1915] Issue #1904: GmlReader ignores srsDimension attribute in the posList
[#1916] Apply same backslash escaping to string literal within "IN" clause as Equals
Improvements
[#1917] Improve UrlValidation Performance
[#1924] Add System.Text.Json dependency into the Nuspec
Following are the changes done since 7.7.1.
Features
N/A
Fixed Bugs
[#1880] Downgrade the System.Text.Json package reference version
[#1886] Http headers should be case insensitive
[#1891] Fix logic to validate URL segment by type
Improvements
[#1873] Azure Pipeline update to include Symbols in snupkg
[#1887] Fix issue #1883, MultipartMixed grows cache indefinitely
[#1888] Performance Fix: OData.metadata=full is very CPU intensive
Following are the changes done since 7.7.0.
Features
N/A
Fixed Bugs
[#1762] Enable Where clause to generate $filter query options for key predicates
[#1793] Different null validation messages for complex and primitive collections
[#1831] Fix bug on atomicityGroup as a dependsOn value in Odata v4
[#1848] Fix platform not supported exception
[#1855] Hotfix for the infinite loop if structured type has property which type is the declaring type
[#1865] Fix Enum as string used with Has Issue
Improvements
[#1779] Build cmd and additional updates for VS upgrade
[#1795] Migrate FxCop Legacy (Legacy analysis) to FxCop Analyzers (Source analysis)
[#1840] Update client E2E xunit tests
[#1849] Add "RemovalDate" property to deprecation annotation
[#1853] Removed the unnecessary string allocations from hot path in JsonReader
[#1854] OData path fixes
Following are the changes done since 7.6.4.
[Be NOTED] One of the main change includes upgrading OData package platform to output libraries for .net4.5, .netstandard1.1 and .netstandard2.0, However for client package .netstandard1.1 is removed
Features
[#1775] Json metadata writer and reader using System.Text.Json
[#1769] Rule-based ODataUrlValidation engine
[#1749] Add support for Json Batch Requests in Odata Client
[#1743] Support Navigation Property on complex types on Client
[#1740] Add support for relative and absolute uris in json batch requests
[#1712] Implement client support for dynamic properties dictionary
Fixed Bugs
[#1811] Fix parsing of floats in $apply/aggregate/average expression
[#1783] Fix decoding single quote within double-quoted string in action/function parameter alias
[#1778] CSDL Serialization: NullReferenceException when serializing 1:n NavigationProperties
[#1770] Fix how composite async methods invoke lower level methods.
[#1763] Set IEEE754Compatible parameter from the batch request
[#1760] Fix IN operator double quotes issue
[#1756] Fix Reading OData Error Response in OData Client
[#1731] Support for abstract complex types with no properties
[#1727] Fix bug where open types are not identified as such during serialization
[#1659] Enable OData client to send IEEE754Compatible parameter in the request
[#1656] Avoid carrying over Count query option to the next query.
[#1607] Fix Select Expand Issue of selecting all navigation properties for Full Metadata request and fixing Odata Context
Improvements
[#1738] Support for Media Link entities with no tracking
[#1796] Update read write timeout value when timeout value is set
[#1808] Reduce warnings across projects
[#1823] Continue to Fix ODL build warnings
[#1759] Migrate odata client tests to xUnit
[#1824] Add public api test into pipeline
[#1828] Rename AddError to AddMessage
[#1815] Validate and throw exception for invalid (empty) collections
[#1758] Added Severity enum to EdmError
[#1729] Improve error message when adding unsupported query option
[#1695] Support Mocking in OData Client
During this release, we moved over the build setup to azure pipelines and updated the library to support Visual Studio 2019 which will make it easier for the community to contribute.
Features
[#1775] Json metadata writer and reader using System.Text.Json
[#1769] Rule-based ODataUrlValidation engine
[#1749] Add support for Json Batch Requests in Odata Client
[#1743] Support Navigation Property on complex types on Client
[#1740] Add support for relative and absolute uris in json batch requests
[#1712] Implement client support for dynamic properties dictionary
Fixed Bugs
[#1783] Fix decoding single quote within double-quoted string in action/function parameter alias
[#1778] CSDL Serialization: NullReferenceException when serializing 1:n NavigationProperties
[#1770] Fix how composite async methods invoke lower level methods.
[#1763] Set IEEE754Compatible parameter from the batch request
[#1760] Fix IN operator double quotes issue
[#1756] Fix Reading OData Error Response in OData Client
[#1731] Support for abstract complex types with no properties
[#1727] Fix bug where open types are not identified as such during serialization
[#1659] Enable OData client to send IEEE754Compatible parameter in the request
[#1656] Avoid carrying over Count query option to the next query.
[#1607] Fix Select Expand Issue of selecting all navigation properties for Full Metadata request and fixing Odata Context
Improvements
[#1758] Added Severity enum to EdmError
[#1729] Improve error message when adding unsupported query option
[#1695] Support Mocking in OData Client
During this release, we moved over the build setup to azure pipelines and updated the library to support Visual Studio 2019 which will make it easier for the community to contribute.
Features
[#1713] Annotating an element using AnnotationPath
Fixed Bugs
[#1700] Fix null reference error when matching binding type
[#1676] Adding an EntitySet to a model using the includeServiceDocument throws exception
[#1671] ArgumentNullException on Any in ODataUriResolver
[#1614] DataServiceContext can't work with POCO's due to Missing IEdmModel
[#1334] Missing overload of 'IncludeTotalCount' that takes a 'bool'
[#1332] LINQ 'Select()' call not producing expected '$select' query option on expression
[#543] OData Client Requires Microsoft.OData.Client.Key attribute for the entity, does not support the common key
Improvements
[#1633] Change version date code to allow dates that don't fit Int16
[#1305] Improve error message - Unable to call action with complex parameter in complex parameter.
[#843] DataServiceClientException message improvement
Fixed Bugs
[#1653] Combine Dispose methods on JsonWriter
[#1651] $filter in (null) does not working
[#1643] Allow Microsoft.OData.Client.Serializer.GetKeyString to receive an IDictionary Object
[#1623] IN operator fails on strings with commas in them
[#1621] Fixes for supporting escape function and key values terminating in colon
[#11576] Fixes for OData.net Client throwing InvalidOperationException when calling 'Move' on a DataServiceCollection
Improvements
[#1603] Save ODataPath ToList for improved performance
[#1602] Performance improvements in FunctionOverloadResolver
Features
[#1585] Support deep updates
Fixed Bugs
[#1598] Support the namespace alias for operation in Uri parser
[#1586] Fixes for Csdl.GetNamespaceAlias extension method
[#1583] Allow duplicate properties in $select with no select options
[#1564] Enable TLS 1.2 for package testing
[#1558] Update style cop to not require net 3.5 installation
Improvements
[#1595] Update Clone() to copy array pool
Features
Fixed Bugs
[#1547] Remove the prefix for SrsName in GmlWriter.
Improvements
[#1550] Change naming of DataModification* terms and types in vocabularies.
[#1553] Change the AssemblyVersionAttribute without the build revision.
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Features
[#1488] & [#1532] Support nested query options ($filter, $orderby, $top, $skip, $count, $search, $select, $compute) in $select clause.
[#1494] Support metadata select exposure control.
Fixed Bugs
[#1395] Fix the problem when defining custom uri function with name 'contains'.
[#1493] Enable $expand=* after the complex type.
[#1506] Support groupby with property path length greater than 2.
[#1516] Do not enforc ContentID Uniqueness outside ChangeSet in MultipartMixed.
[#1517] Fix async message write.
[#1526] Correct @odata.context for combination of $select/$apply/$compute/$expand.
[#1530] Fix TypeSegment class constructor and property setting mismatch.
Improvements
[#1522] Update Authorization, Core, Capabilites vocabularies annotation.
[#1523] Change ODataInnerError to compliance OData spec.
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Features
[#1440] Add the Example Term into Core vocabulary.
[#1454] Support versioned preferences for reading/writing OData prefix.
[#1459] Write nested entity reference link(s) in request/response.
[#1464] Enable to write the nextlink for the collection of entity reference links.
[#1476] Support reading/writing EDMX with Version=4.01.
Fixed Bugs
[#1318] Unescaped colons in relative Uri cause Invalid URI exception.
[#1451] FindType doesn't work with alias-qualified names.
[#1455] Remove bogus validation error for EntitySetPath.
[#1463] Validate the resource type and resource set type in the same inheritance tree.
[#1465] Support out of line annotations can't target ENUM member.
[#1467] Support ENUM parameters for Uri function.
[#1469] Add a validation rule about target of the annotation should be allowed in the AppliesTo of the term.
Improvements
[#1448] Refactor & Improve the ODataMediaTypeResolver.
[#1458] Align resource template and generated code.
[#1473] Reduce ToList calls in operation overload resolver.
[#1474] Fix tests disabled for large object streaming pull request.
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Features
[#1204] Support Large object stream (reader & writer).
[#1400] Enable Uri parser to parse escape function.
[#1414] Add the IEdmOperationReturn interface and enable annotation on return type of operation.
[#1422] & [#1428] Update capabilities, validation & authorization vocabularies.
[#1426] Properties defined in $compute and $apply could be used in a following query options ($select, $compute, $filter or $orderby).
Fixed Bugs
[#1260] Throw error when null value passed for collection of non-nullable complex type.
[#1409] Ensure that we could use aliases created in compute() in groupby.
[#1415] Build filter with "any" and "or" fails on keeping operations priority.
Improvements
[#1418] Use buffer when writing binary or byte array.
[#1420] Use array pool in JSON writer.
Note
ODataLib 7.5.4 includes the following new features, bug fixes and improvements:
Features
#1376 Enable reading validation for derived type constraint annotation.
#1285 Support customizing the built-in vocabulary models.
#1404 Support reading/writing delta request payload.
Fixed Bugs
#1368 Make aliases created in compute() transformation visible for following transforms/query options.
#1373 IN operator not working with null value on nullable properties.
#1385 & #1164 Support parentheses and brackets in a CollectionConstantNode for IN operator.
#1390 ODataUriParser can't parse for function with all omitted optional parameters.
#1391 Fix build Uri problem with filter by Enum.
Improvements
#1024 Improve the JSON reader buffer.
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.5.3 includes the following new features, bug fixes and improvements:
Features
#1295 Enable derived type validation in Uri parsing
#1341 Support read/write Edm.PrimitiveType, Edm.ComplexType, Edm.EntityType
#1344 Enable expand transformation in $apply
#1346 Introduce new ODataResourceValue class and support read/write ODataResourceValue
#1358 Enable derived type validation in writing
Fixed Bugs
#1323 Fix the escaped single-quote and Guid literals for IN operator
#1359 Fix SelectExpandNode for navigation properties on derived/complex types
Improvements
#1349 Remove locks from Uri parser
#1357 Use TryParse API instead of Parse for date to avoiding throwing exceptions
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.5.2 includes the following new features, bug fixes and improvements:
Features
#1272 Support $index query option
#1275 Support $apply in $expand
#855 Support OptionalParameter as an external annotation
#1262 OutOfLine Annotation for EnumMember throw exception when write to CSDL
#1276 OData NuGet package description should change to reflect the latest status
#1287 Add Validation vocabulary annotation
#1110 Set-based operations
#1293 Update the Core vocabulary xml
#1286 Context URL for expand
#1299 Enable write navigation property binding for containment target
#1302 Update the DerivedTypeConstraint term in Validation vocabulary
#1310 Add AllowedTerms/MinItems/MaxItems to Validation vocabulary
#1308 Add LocalDateTime type definition into Core vocabulary
#1312 Edm model validation for structural property type has wrong rule for property with type-definition type
#1314 Update DerivedTypeConstraint appliesTo
#1073 Better story for creating complex spatial types
#1296 Remove Contentions from Microsoft.OData.Edm
#1307 Add annotation term for Org.OData.Community.URLEscape.V1.URLEscapeFunction
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.5.1 includes the following bug fixes:
Fixed Bugs
#1181 Refactor the JSON string escape in JSON writer
#1216 Read parameter should not throw exception if missing optional parameter
#1220 Combined length of user strings exceeds allowed limit in OData V4 Code Generator
#1226 Cache the Edm full name for the Edm types
#1232 Fix lexer bug that breaks functions named 'in'
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.5.0 includes the following items: IN operator, Entity set aggregation, various bug fixes, and performance improvement.
Features
#757 Entity set aggregations
#1165 [Feature] IN operator
Fixed Bugs
#513 $select with complexCol/prop should be supported
#985 VS 2017 15.4.2 Broken client
#1043 Thread safety of context item collections
#1044 Code generation from T4 template - IgnoreUnexpectedElementsAndAttributes doesn't seem to work
#1087 Batch is broken by load balancer (proxy)
#1148 OData Code Generator does not install on VS2015
#1123 Include dots in parseIdentifier for annotation parsing
#1130 Add StringComparison in String.Equal() method call
#1142 fix write document metadata properties for apply ComputeTransformationNode
#1143 fix build Uri from groupby navigation property with many child structural properties
#1145 Memory Leak in Library?
#1151 Port client-side DateTime support fix to 7.x
#1153 UriParser should throw exception for mismatched keys count when UnqualifiedODataUriResolver is configured
#1155 FunctionCallBinder issue when case-insensitive is enabled
#1157 ODataMessageReader doesn't honor the absence of ValidationKinds.ThrowIfTypeConflictsWithMetadata flag
#1159 remove the Document element from Edm lib
#1182 Fix a wrong if condition
#1191 Avoid String allocations when writing strings that require special character handling
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.4.4 fixes a potential concurrency issue with an internal dictionary used for tracking navigation property mappings and adds code to make sure that navigation property bindings are never written for containment navigation properties.
Fixed Bugs
Issue #137 Possible contention issues in navigationPropertyMappings dictionary. Issue #138 Containment navigation properties shouldn't define NavigationPropertyBindings to non-containment sets
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.4.3 fixes a minor bug introduced in 7.4.2 in which the path for a contained entity set was computed incorrectly.
Fixed Bugs
Issue #1121 Incorrect path calculated for contained entity sets.
Issue #1086 Enable writing type annotations for collections in full metadata.
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.4.2 includes the following items: support for "Authorization" vocabularies to align with the Open API specification, enabling support for containment paths in navigation property bindings by addressing a bug, and various other fixes.
Features
#1070 Add the Authorization vocabularies annotation into core Edm model
#1109 Fix support for containment paths in nav prop bindings
#1112 Bug fix: Throw exception for an invalid Enum value
Fixed Bugs
Issue #645 Enable updating top-level properties to null.
Issue #1045 ODataUriExtensions.BuildUri ignores $apply
Issue #1084 Updating package ID to match the existing VSIX ID in the marketplace
Issue #1085 ExpressionLexer fix for parameter alias token in dotted expression
Issue #1092 Address StyleCop warnings
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.4.1 includes the following items: a new OData Client Code Gen extension for VS2017 using the latest version of the libraries, built-in abstract types for Edm models, KeyAsSegmentSupported Boolean to the capabilities vocabulary, added validation rules to abstract types, support for AnnotationSegment, NuGet package testing, and various bug fixes.
Features
[#987 Adding new OData Client Code Gen for VS2017
[#1042 Remove the NavigationPropertyEntityMustNotIndirectlyContainItself rule
[#1051 Add the build-in abstract type into Edm core model - Edm Type Part.
[#1055 OptionalDollarSign: Small test update and expose API for DI option setter/getter
[#1056 Add KeyAsSegmentSupported annotation term to Capabilities vocabulary
[#1058 Add the validation rules to the abstract types
[#1075 Add support for AnnotationSegment to PathSegmentHandler.
[#1080 Add NuGet package testing.
Fixed Bugs
Issue #530 LINQ query generation with Date functions produces weird URLs
Issue #1027 Edm.NavigationPropertyPath not supported
Issue #1040 Need to update batch changeset ID to boundary value
Issue #1046 OData Edm lib issue with vocabulary
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.4.0 has the following beta releases:
Features
Issue #103 OData v4: Deserialize client unknown properties into OData Object Model.
Issue #801 Support Primitive Type Casts.
Issue #988 Add support for 4.01 Delta Format
Fixed Bugs
Issue #698 DataServiceQuerySingle<T>.GetValueAsync inconsistent with GetValue in support for GET returning 404.
Issue #800 Need for parsing Open types using OData.NET v7.X.
Issue #949 ODataUriExtensions.BuildUri ignores $skiptoken.
PR #961 Add support for Enum keys.
Issue #965 Parsing encoded character with special meaning in ODataJsonLightContextUriParser.
Features
Issue #226 Support a JSON serialization for $batch.
Issue #866 "Microsoft.OData.Client" support for ,NET Core.
Fixed Bugs
PR #980 Support Enum to string comparison.
PR #995 Use ConcurrentDictionary in all platforms to make client EDM model thread safe.
Issue #1008 & Issue #1009 Fix property validation issue.
Issue #1101 Microsoft.OData.Client 7.0+ needs to support GetValue like the older OData Client.
Features
PR #1020 DependsOn Ids for Multipart/Mixed Batch
Fixed Bugs
Issue #1022 Calculate correct context URI with Operation path segment.
Issue #1193 Add the extension function back to derived class.
Issue #1028 Add the Enum member expression into validation and don't return the error message.
Features
Issue #1037 Support reading/writing OData 4.01 compatible JSON payloads.
This release delivers OData core libraries including ODataLib, EdmLib, Spatial and Client.
Note
ODataLib 7.3.1 addresses an issue where $compute parsing was not triggered by a global call to ParseUri.
Fixed Bugs
Issue #927 Add Compute to ParseUri.
This release delivers OData core libraries including ODataLib, EdmLib and Spatial. OData Client for .NET is not published in this release.
Note
ODataLib 7.3.0 adds support key features including optional function parameters, parser support for the $compute clause, primitive type casts, and the ability to read and write untyped data as structured values.
Features
[#760 Aggregation not supported for dynamic properties
#782 Add support for optional parameters in function
#799 Support for $compute in $select and $filter
#800 Support for structured reading/writing of untyped values
#801 Supporting Primitive Type Casts
Fixed Bugs
Issue #747 Cannot select dynamic property of a dynamic property
Issue #814 Support writing Enum-valued Annotations
Issue #856 Raw Value serializer output JSON string for Spatial type
This release delivers OData core libraries including ODataLib, EdmLib and Spatial. OData Client for .NET is not published in this release.
Note
7.2.0 re-introduces .NET Standard 1.1 libraries of ODataLib (OData.Core, OData.Edm, and Microsoft.Spatial). The PCL versions remain in the packages and are shipped alongside the new .NET Standard libraries. Bug fixes and additional test validations are also included in this release.
Features
Commit 0b54111ee7909e71263b83fc60268de0de817986 Expose UriQueryExpressionParser.ParseFilter as a public API #805
Fixed Bugs
Issue #789 BUG? Exception when create EdmModel V7.1.0
Improvements
Commit 072f6f7c9bc4c739e553f7fa0996618c621a6589 Adding FxCop exclusion for CA3053:UseXmlSecureResolver in code that compiles under .Net portable framework.
Commit 272c74afd1dda7a4a8e562c45dd9da9a9d74dd8b Fix suppression for CA3053 to reference proper category and checkid.
Commit 170827a01f9141649a848aefb13531163dedd65e This change fixes test failures in both local machine and in the lab
Commit 66738741dbecad8e0dc32fa787a9f98898a2beda Adding .NET Core unit tests that integrate .NET Standard Libraries (#803)
This release delivers OData core libraries including ODataLib, EdmLib and Spatial. OData Client for .NET is not published in this release.
Note
7.1.1 is a re-release of 7.1.0 without the NetStandard version of ODataLib, EdmLib and Spatial due to an issue found in the NetStandard versions of those binaries. The PCL versions of those binaries are unaffected. This release delivers OData core libraries including ODataLib, EdmLib and Spatial. OData Client for .NET is not published in this release.
Commit a2af8c6c19f104f46b442df7f57f624ed77d82fc Update profile111 to .netstandard1.1.
Commit 6f746cd0cd9d62a5bc57e345a910a6f9d8d4dc1b Adding new projects and solution for .NET Standard version of ODL.
Creating a new solution file for .NET Standard projects. Adding .NET Standard versions of Microsoft.Spatial, Microsoft.OData.Edm, Microsoft.OData.Core, and Microsoft.OData.Client. MSBuild doesn't pre-process the dependency graph provided by the csproj files, so explicitly spoon feeding the chain in the Microsoft.Test.OData.DotNetStandard.sln file.
Update build script to default to VS 2015 for .NET Standard, removing NuGetPackage test project and deprecating it, adding E2E .NET Standard project
Remove duplicate file: IEdmReferentialConstraint.cs.
Change version to 7.1.0
[!Note]: "nuget restore" needs to be run manually on the new project files for them to compile.
Features
Commit c0c6006a5a8683507c38623144a145de128851c6 Adding support and tests for virtual property count.
Commit d064a1c6358130c581bb9d5bb32e774f8e921992 Adding support and tests for custom aggregation methods.
Commit 8e965e9f89951dbfea510e67cbbe89e4f75fa69b Add support for operations with no bindings.
Fixed Bugs
Issue #525 Support for AnnotationPath.
Issue #526 Support for IncludeInServiceDocument.
Issue #680 Text "Date" will be parsed as "EDM.Date" type segment in URL parser.
Issue #687 Null exception when HttpHeaderValueElement.Value is not set.
Issue #706 Serialization exception when 2 subtypes define a property with the same name but different types.
Issue #758 countdistinct and $count are returning Edm.Int64 which is not spec compliant.
Issue #776 Fix ContextUrl generation for operations in path.
Issue #777 Fix trailing whitespace on empty line.
Issue #778 Fix tests and code for reading nested results from operations.
Improvements
Commit 6e2dee52b37e620926cd0535f40d5537ba839c05 Add Test solutions for WP WindowsStore Portable.
Commit d695d6ded6d44fa3fdb7abbd5f8dc19c29330e10 Update license.
Commit 8521d38405351f789134d8945a696a18eec929d3 Fix Phone Project.
Commit dc9632b686e47dba8a0bbeffb5cc8c5850e27c8b Fix fxcop issue.
Commit 3ea2d70d14c97344f43383d867a9edd81eb407a3 Add test cases for DotNetCore.
Commit 2ef3fc921ad4b557ef67cd17ce95eb08b33fa14e Update nuget.exe to 3.5.0 to resolve build issue with xunit.
Commit 0dc70678f05201ebc48c83219f6b4450078d0693 Reordering comments to avoid compiler warnings.
Commit bbd9ede1e73de3538af6f1a223bcc7fe689688f4 Update test project to copy the new and old version of the EntityFramework.nuspec file.
Commit 6eb8a4b5ecff1d83d883a95162d187ee3a44f935 Remove use of StringBuilder.Clear() for .NET 3.5 support.
Commit c1edd714bf58ddd2876e10d31f0bd9ad81e25664 Added metadata to tests for new bound function.
Note
This release delivers OData core libraries including ODataLib, EdmLib and Spatial. OData Client for .NET is not published in this release.
We used to have lots of validation related members/flags in ODataMessageReaderSettings
and ODataMessageWriterSettings
. In OData 7.0, we cleaned up the out-dated flags and put the remained flags together and keep them be considered in a consistent way.
ODataMessageWriterSettings | ODataMessageReaderSettings |
---|---|
EnableFullValidation | EnableFullValidation |
EnableDefaultBehavior() | EnableDefaultBehavior() |
EnableODataServerBehavior() | EnableODataServerBehavior() |
EnableWcfDataServicesClientBehavior() | EnableWcfDataServicesClientBehavior() |
UndeclaredPropertyBehaviorKinds | |
DisablePrimitiveTypeConversion | |
DisableStrictMetadataValidation |
The EnablexxxBehavior() in writer and reader settings actually wrapped few flags.
ODataWriterBehavior | ODataReaderBehavior |
---|---|
AllowDuplicatePropertyNames | AllowDuplicatePropertyNames |
AllowNullValuesForNonNullablePrimitiveTypes |
Those flags are all removed, and an Enum type would represent all the settings instead.
A flag Enum type ValidationKinds to represent all validation kinds in reader and writer:
/// <summary>
/// Validation kinds used in ODataMessageReaderSettings and ODataMessageWriterSettings.
/// </summary>
[Flags]
public enum ValidationKinds
{
/// <summary>
/// No validations.
/// </summary>
None = 0,
/// <summary>
/// Disallow duplicate properties in ODataResource (i.e., properties with the same name).
/// If no duplication can be guaranteed, this flag can be turned off for better performance.
/// </summary>
ThrowOnDuplicatePropertyNames = 1,
/// <summary>
/// Do not support for undeclared property for non open type.
/// </summary>
ThrowOnUndeclaredPropertyForNonOpenType = 2,
/// <summary>
/// Validates that the type in input must exactly match the model.
/// If the input can be guaranteed to be valid, this flag can be turned off for better performance.
/// </summary>
ThrowIfTypeConflictsWithMetadata = 4,
/// <summary>
/// Enable all validations.
/// </summary>
All = ~0
}
Writer: Add member Validations which accepts all the combinations of ValidationKinds
/// <summary>
/// Configuration settings for OData message writers.
/// </summary>
public sealed class ODataMessageWriterSettings
{
/// <summary>
/// Gets or sets Validations in writer.
/// </summary>
public ValidationKinds Validations { get; set; }
}
Reader: Add member Validations which accepts all the combinations of ValidationKinds
/// <summary>
/// Configuration settings for OData message readers.
/// </summary>
public sealed class ODataMessageReaderSettings
{
/// <summary>
/// Gets or sets Validations in reader.
/// </summary>
public ValidationKinds Validations { get; set; }
}
writerSettings.Validations = ValidationKinds.All
Equal to:
writerSettings.EnableFullValidation = true
readerSettings.Validations |= ValidationKinds.ThrowIfTypeConflictsWithMetadata
Equal to:
readerSettings.DisableStrictMetadataValidation = false
Same applies for the reader settings.
The expression of $filter
and $orderby
will be parsed to multiple query nodes. Each node has particular representation, for example, a navigation property access will be interpreted as SingleNavigationNode
and collection of navigation property access will be interpreted as CollectionNavigationNode
.
Since we have merged complex type and entity type in OData Core lib, complex have more similarity with entity other than primitive property. Also in order to support navigation property under complex, the query nodes' type and hierarchy are changed and adjusted to make it more reasonable.
Old | New |
---|---|
NonentityRangeVariable | NonResourceRangeVariable |
EntityRangeVariable | ResourceRangeVariable |
NonentityRangeVariableReferenceNode | NonResourceRangeVariableReferenceNode |
EntityRangeVariableReferenceNode | ResourceRangeVariableReferenceNode |
EntityCollectionCastNode | CollectionResourceCastNode |
EntityCollectionFunctionCallNode | CollectionResourceFunctionCallNode |
SingleEntityCastNode | SingleResourceCastNode |
SingleEntityFunctionCallNode | SingleResourceFunctionCallNode |
Add SingleResourceNode as the base class of SingleEntityNode and SingleComplexNode
SingleNavigationNode and CollectionNavigationNode accepts SingleResourceNode as parent node and also accepts bindingpath in the constructor.The parameter order is also adjusted.
Take SingleNavigationNode for example:
public SingleNavigationNode(IEdmNavigationProperty navigationProperty, SingleEntityNode source)
Changed to:
public SingleNavigationNode(SingleResourceNode source, IEdmNavigationProperty navigationProperty, IEdmPathExpression bindingPath)
Complex property used to share nodes with primitive property, now it shares most nodes with entity. Here lists the nodes that complex used before and now.
Before | Now |
---|---|
NonentityRangeVariable | ResourceRangeVariable |
NonentityRangeVariableReference | ResourceRangeVariableReference |
SingleValuePropertyAccessNode | SingleComplexNode |
SingleValueCastNode | SingleResourceCastNode |
SingleValueFunctionCallNode | SingleResourceFunctionCallNode |
CollectionPropertyAccessNode | CollectionComplexNode |
CollectionPropertyCastNode | CollectionResourceCastNode |
CollectionFunctionCallNode | CollectionResourceFunctionCallNode |
This page will describes the Public API changes for "Merge entity and complex". The basic idea is that we named both an entity and a complex instance as an ODataResource
, and named a collection of entity or a collection of complex as an ODataResourceSet
.
Following is difference of public APIs between ODataLib 7.0 and ODataLib 6.15.
Enumeration | ODataLib 6.15 | ODataLib 7.0 |
---|---|---|
ODataEntry | ODataResource | |
ODataComplexValue | ODataResource | |
ODataFeed | ODataResourceSet | |
ODataCollectionValue for Complex | ODataResourceSet | |
ODataNavigationLink | ODataNestedResourceInfo | |
ODataPayloadKind | Entry | Resource |
Feed | ResourceSet | |
ODataReaderState | EntryStart | ResourceStart |
EntryEnd | ResourceEnd | |
FeedStart | ResourceSetStart | |
FeedEnd | ResourceSetEnd | |
NavigationLinkStart | NestedResourceInfoStart | |
NavigationLinkEnd | NestedResourceInfoEnd | |
ODataParameterReaderState | Entry | Resource |
Feed | ResourceSet | |
ODataInputContext | ODataReader CreateEntryReader (IEdmNavigationSource navigationSource, IEdmEntityType expectedEntityType) | ODataReader CreateResourceReader(IEdmNavigationSource navigationSource, IEdmStructuredType expectedResourceType) |
ODataReader CreateFeedReader (IEdmEntitySetBase entitySet, IEdmEntityType expectedBaseEntityType) | ODataReader CreateResourceSetReader(IEdmEntitySetBase entitySet, IEdmStructuredType expectedResourceType) | |
ODataOutputContext | ODataWriter CreateODataEntryWriter (IEdmNavigationSource navigationSource, IEdmEntityType entityType) | ODataWriter CreateODataResourceWriter(IEdmNavigationSource navigationSource, IEdmStructuredType resourceType) |
ODataWriter CreateODataFeedWriter (IEdmEntitySetBase entitySet, IEdmEntityType entityType) | ODataWriter CreateODataResourceSetWriter(IEdmEntitySetBase entitySet, IEdmStructuredType resourceType) | |
ODataParameterReader | ODataReader CreateEntryReader () | ODataReader CreateResourceReader () |
ODataReader CreateFeedReader () | ODataReader CreateResourceSetReader () | |
ODataParameterWriter | ODataWriter CreateEntryWriter (string parameterName) | ODataWriter CreateResourceWriter (string parameterName) |
ODataWriter CreateFeedWriter (string parameterName) | ODataWriter CreateResourceSetWriter (string parameterName) | |
ODataMessageReader | public Microsoft.OData.Core.ODataReader CreateODataEntryReader () | public Microsoft.OData.ODataReader CreateODataResourceReader () |
public Microsoft.OData.Core.ODataReader CreateODataEntryReader (IEdmEntityType entityType) | public Microsoft.OData.ODataReader CreateODataResourceReader (IEdmStructuredType resourceType) | |
public Microsoft.OData.Core.ODataReader CreateODataEntryReader (IEdmNavigationSource navigationSource, IEdmEntityType entityType) | public Microsoft.OData.ODataReader CreateODataResourceReader (IEdmNavigationSource navigationSource, IEdmStructuredType resourceType) | |
public Microsoft.OData.Core.ODataReader CreateODataFeedReader () | public Microsoft.OData.ODataReader CreateODataResourceSetReader () | |
public Microsoft.OData.Core.ODataReader CreateODataFeedReader (IEdmEntityType expectedBaseEntityType) | public Microsoft.OData.ODataReader CreateODataResourceSetReader (IEdmStructuredType expectedResourceType) | |
public Microsoft.OData.Core.ODataReader CreateODataFeedReader (IEdmEntitySetBase entitySet, IEdmEntityType expectedBaseEntityType | public Microsoft.OData.ODataReader CreateODataResourceSetReader (IEdmEntitySetBase entitySet, IEdmStructuredType expectedResourceType) | |
public ODataReader CreateODataUriParameterResourceSetReader(IEdmEntitySetBase entitySet, IEdmStructuredType expectedResourceType) | ||
public ODataReader CreateODataUriParameterResourceReader(IEdmNavigationSource navigationSource, IEdmStructuredType expectedResourceType) | ||
ODataMessageWriter | public Microsoft.OData.Core.ODataWriter CreateODataEntryWriter () | public Microsoft.OData.ODataWriter CreateODataResourceSetWriter () |
public Microsoft.OData.Core.ODataWriter CreateODataEntryWriter (IEdmNavigationSource navigationSource) | public Microsoft.OData.ODataWriter CreateODataResourceSetWriter (IEdmEntitySetBase entitySet) | |
public Microsoft.OData.Core.ODataWriter CreateODataEntryWriter (IEdmNavigationSource navigationSource, IEdmEntityType entityType) | public Microsoft.OData.ODataWriter CreateODataResourceSetWriter (IEdmEntitySetBase entitySet, IEdmStructuredType resourceType) | |
public Microsoft.OData.Core.ODataWriter CreateODataFeedWriter () | public Microsoft.OData.ODataWriter CreateODataResourceWriter () | |
public Microsoft.OData.Core.ODataWriter CreateODataFeedWriter (IEdmEntitySetBase entitySet) | public Microsoft.OData.ODataWriter CreateODataResourceWriter (IEdmNavigationSource navigationSource) | |
public Microsoft.OData.Core.ODataWriter CreateODataFeedWriter (IEdmEntitySetBase entitySet, IEdmEntityType entityType) | public Microsoft.OData.ODataWriter CreateODataResourceWriter (IEdmNavigationSource navigationSource, IEdmStructuredType resourceType) | |
public ODataWriter CreateODataUriParameterResourceWriter(IEdmNavigationSource navigationSource, IEdmStructuredType resourceType) | ||
public ODataWriter CreateODataUriParameterResourceSetWriter(IEdmEntitySetBase entitySetBase, IEdmStructuredType resourceType) |
Features
Issue #245 Support duplicate non-OData query options.
Issue #248 Support untyped JSON.
Issue #271 Support writing relative URIs in OData batch operations.
BatchPayloadUriOption
to support three URI formats in batch payload.Issue #366 Support collection of mixed primitive types and Edm.Untyped.
Issue #501 Integrate dependency injection (DI).
We introduced an abstraction layer consisting of two interfaces IContainerBuilder
and IContainerProvider
so that ODataLib is decoupled from any concrete implementation of DI framework.
Now we support the following services to be replaced by users:
JSON reader via IJsonReaderFactory
JSON writer via IJsonWriterFactory
ODataMediaTypeResolver
ODataPayloadValueConverter
ODataUriResolver
UriPathParser
We also support prototype services. For each prototype service, you can specify a globally singleton prototype instance. Then for each request, a cloned instance will be created from that prototype which can isolate the modification within the request boundary. Currently we support three prototype services:
ODataMessageReaderSettings
ODataMessageWriterSettings
ODataSimplifiedOptions
Issue #502 [Support URI path syntax customization](../odata features/2016-08-23-11-08-uri-parser-path-extensibility).
UriPathParser.ParsePathIntoSegments
to support customizing how to separate a Uri into segmentsParseDynamicPathSegmentFunc
for customizing how to parse a dynamic path segment.Issue #613 Support type facets when referencing TypeDefinition
types.
Issue #622 Support navigation property on complex types.
Issue #629 Support multi-NavigationPropertyBindings for a single navigation property by using different paths
Issue #631 Support fluent writer API.
WriteStart
and WriteEnd
calls are used in writing payloads. This syntax is error-prone, and soon gets unmanageable with complex and deeply nested payloads. In this new release, you can instead write payloads using the neat fluent syntax.Issue #635 Support collection of nullable values for dynamic properties.
Issue #637 Support system query options without $ prefix.
ODataUriParser.EnableNoDollarQueryOptions
flag to enable user to support '$' system query prefix optional.Add ODataSimplifiedOptions
class for simplified reader, writer, URL parsing options.
Support duplicate custom instance annotations.
Fixed Bugs
Issue #104 Function imports with parameters are included in service document.
Issue #498 Typos in namespace/class names.
Issue #508 YYYY-MM-DD in URI should be parsed into Date
, not DataTimeOffset
.
Issue #556 URI template parser doesn't work correctly if key is of an Enum type.
Issue #573 CollectionCount
is not publicly accessible.
Issue #592 ODataUriParser.ParsePath()
doesn’t work correctly if EntitySetPath
is not specified in model.
Issue #628 Dynamic complex (collection) property is annotated with association and navigation links.
Issue #638 Null value at the first position in a complex collection cannot be read.
Issue #658 ODataValueUtils.ToODataValue
doesn’t work with System.Enum
objects.
Issue #385 Remove junk code to improve stability and reduce assembly size.
EntitySetNode
Issue #500 Remove deprecated NuGet profiles
Issue #510 Remove Atom support
Issue #511 Clean property and method in ODataMessageReaderSettings
and ODataMessageWriterSettings
ODataSimplified
and UseKeyAsSegment
to ODataSimplifiedOptions
Issue #548 Rename "value term" and "value annotation" in EdmLib.
Issue #565 Update CoreVocabularies.xml to the new version and related APIs.
Issue #564 Remove Edm.ConcurrencyMode
attribute from Property.
Issue #606 Remove V3 vocabulary expressions
IEdmEnumMemberReferenceExpression
, IEdmEnumMemberReferenceExpression
, IEdmEntitySetReferenceExpression
, IEdmPropertyReferenceExpression
, IEdmParameterReferenceExpression
and IEdmOperationReferenceExpression
IEdmEntitySetReferenceExpression
, please use IEdmPathExpression
where users need to provide a path (a list of strings) to a navigation property with which we can resolve the target entity set from the navigation source.IEdmOperationReferenceExpression
, please use IEdmFunction
because the Edm.Apply
only accepts an EDM function in OData V4. This also simplifies the structure of Edm.Apply
expression.Issue #618 Remove deprecated validation rules
ComplexTypeInvalidAbstractComplexType
ComplexTypeInvalidPolymorphicComplexType
ComplexTypeMustContainProperties
OnlyEntityTypesCanBeOpen
Issue #504 [Unify entity and complex (collection) type serialization/deserialization API](../odata features/2016-08-23-10-42-merge-complex-and-entity).
ODataEntry
to ODataResource
and remove ODataComplexValue
to support complex and entity.ODataFeed
to ODataResourceSet
to support feed and complex collection.ODataNavigationLink
to ODataNestedResourceInfo
to support navigation property and complex property or complex collection property.IEdmStructuredType
.Issue #491 Simplified namespaces.
Issue #517 Centralized reader/writer validation. Breaking Changes
ValidationKinds
to represent all validation kinds in reader and writer.ODataMessageWriterSettings
/ODataMessageReaderSettings
to control validations.Issue #571 Rename ODataUrlConvention
to ODataUrlKeyDelimiter
ODataUrlConvention
to ODataUrlKeyDelimiter
.ODataUrlKeyDelimiter.Slash
instead of ODataUrlConvention.Simplified
or ODataUrlConvention.KeyAsSegment
ODataUrlKeyDelimiter.Parentheses
instead of ODataUrlConvention.Default
Issue #614 Improve API design around ODataAnnotatable
SerializationTypeNameAnnotation
into ODataTypeAnnotation
ODataTypeAnnotation
to contain only the type nameODataAnnotatable
in URI parser and simplify the API of ODataAnnotatble
GetAnnotation\<T\>()
and SetAnnotation\<T\>()
will no longer be available because ODataAnnotatable
should only be responsible for managing instance annotations.Issue #484 Preference header extensibility
HttpHeaderValueElement
, which represents http header value elementODataPreferenceHeader
Issue #544 Change Enum member value type from IEdmPrimitiveValue
to a more specific type.
IEdmEnumMemberValue
and class EdmEnumMemberValue
to represent Enum member value specifically. AddMember()
under EnumType
now accepts IEdmEnumMemberValue
instead of IEdmPrimitiveValue
as member value.Issue #621 Make reader able to read contained entity/entityset without context URL.
Issue #640 More sensible type, namely IEnumerable<object>
, for ODataCollectionValue.Items.
Issue #643 Adjust query node kinds in Uri Parser in order to support navigation under complex. Breaking Changes
Improved standard-compliance by forbidding duplicate property names.
Writer throws more accurate and descriptive exceptions.
Improvements
Issue #493 Replace ThrowOnUndeclaredProperty
with the more accurate ThrowOnUndeclaredPropertyForNonOpenType
.
Issue #551 Change the type of EdmReference.Uri
to System.Uri
.
Issue #558, Issue #611 Improve writer performance. Up to 25% improvements compared to ODL 6.15 are achieved depending on scenario.
Issue #632 Rename CsdlXXX to SchemaXXX, and EdmxXXX to CsdlXXX.
The original naming is confusing. According to the CSDL spec:
An XML document using these namespaces and having an edmx:Edmx root element will be called a CSDL document.
So, Edmx is only part of a valid CSDL document. In previous version, CsdlReader
is actually unable to read a CSDL document. It's only able to read the Schema part of it. EdmxReader
, on the other hand, is able to read a whole CSDL document. To clear up the concepts, the following renaming has been done:
CsdlReader/Writer
to SchemaReader/Writer
;EdmxReader/Writer
to CsdlReader/Writer
;EdmxReaderSettings
to CsdlReaderSettings
;EdmxTarget
to CsdlTarget
.Note
This release delivers OData core libraries including ODataLib, EdmLib and Spatial. OData Client for .NET is not published in this release.
Training
Learning path
Implement finance and operations apps - Training
Plan and design your project methodology to successfully implement finance and operations apps with FastTrack services, data management and more.