diff --git a/src/Microsoft.AspNetCore.OData/DataModificationExceptionType.cs b/src/Microsoft.AspNetCore.OData/DataModificationExceptionType.cs
new file mode 100644
index 000000000..7ee1bab8d
--- /dev/null
+++ b/src/Microsoft.AspNetCore.OData/DataModificationExceptionType.cs
@@ -0,0 +1,118 @@
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) .NET Foundation and Contributors. All rights reserved.
+// See License.txt in the project root for license information.
+//
+//------------------------------------------------------------------------------
+
+using System;
+
+namespace Org.OData.Core.V1
+{
+ ///
+ /// Represents a message type.
+ ///
+ public class MessageType
+ {
+ ///
+ /// Code of message.
+ ///
+ public string Code { get; set; }
+
+ ///
+ /// Actual message.
+ ///
+ public string Message { get; set; }
+
+ ///
+ /// Severity of message.
+ ///
+ public string Severity { get; set; }
+
+ ///
+ /// Target of message.
+ ///
+ public string Target { get; set; }
+
+ ///
+ /// Details of message.
+ ///
+ public string Details { get; set; }
+ }
+
+ ///
+ /// Represents an exception type.
+ ///
+ public abstract class ExceptionType
+ {
+ ///
+ /// Represents a message type.
+ ///
+ public MessageType MessageType { get; set; }
+ }
+
+ ///
+ /// Represents the type of exception thrown during a data modification operation.
+ ///
+ public class DataModificationExceptionType : ExceptionType
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DataModificationExceptionType(DataModificationOperationKind failedOperation)
+ {
+ this.FailedOperation = failedOperation;
+ }
+
+ ///
+ /// Represents the kind of data modification operation.
+ ///
+ public DataModificationOperationKind FailedOperation { get; }
+
+ ///
+ /// Represents the response code.
+ ///
+ public Int16 ResponseCode { get; set; }
+ }
+
+ ///
+ /// Enumerates the kind of data modification operations.
+ ///
+ public enum DataModificationOperationKind
+ {
+ ///
+ /// Represents an insert operation.
+ ///
+ Insert,
+
+ ///
+ /// Represents an update operation.
+ ///
+ Update,
+
+ ///
+ /// Represents an insert or update operation if item already exists.
+ ///
+ Upsert,
+
+ ///
+ /// Represents a delete data modification operation.
+ ///
+ Delete,
+
+ ///
+ /// Represents an action or function invocation.
+ ///
+ Invoke,
+
+ ///
+ /// Represents adding a link between entities.
+ ///
+ Link,
+
+ ///
+ /// Represents removing a link between entities.
+ ///
+ Unlink
+ }
+}
diff --git a/src/Microsoft.AspNetCore.OData/Deltas/Delta.cs b/src/Microsoft.AspNetCore.OData/Deltas/Delta.cs
index 9eda97a6a..70367cb57 100644
--- a/src/Microsoft.AspNetCore.OData/Deltas/Delta.cs
+++ b/src/Microsoft.AspNetCore.OData/Deltas/Delta.cs
@@ -21,6 +21,9 @@ public abstract class Delta : DynamicObject, IDelta
///
public abstract DeltaItemKind Kind { get; }
+ ///
+ public IODataInstanceAnnotationContainer TransientInstanceAnnotationContainer { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+
///
/// Clears the Delta and resets the underlying Entity.
///
diff --git a/src/Microsoft.AspNetCore.OData/Deltas/DeltaLinkBaseOfT.cs b/src/Microsoft.AspNetCore.OData/Deltas/DeltaLinkBaseOfT.cs
index 6abf6eb04..bc0858b94 100644
--- a/src/Microsoft.AspNetCore.OData/Deltas/DeltaLinkBaseOfT.cs
+++ b/src/Microsoft.AspNetCore.OData/Deltas/DeltaLinkBaseOfT.cs
@@ -68,5 +68,8 @@ protected DeltaLinkBase(Type structuralType)
/// The name of the relationship property on the parent object.
///
public string Relationship { get; set; }
+
+ ///
+ public IODataInstanceAnnotationContainer TransientInstanceAnnotationContainer { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
}
}
diff --git a/src/Microsoft.AspNetCore.OData/Deltas/IDeltaSetItem.cs b/src/Microsoft.AspNetCore.OData/Deltas/IDeltaSetItem.cs
index 7b8d0efd6..ce239e8fe 100644
--- a/src/Microsoft.AspNetCore.OData/Deltas/IDeltaSetItem.cs
+++ b/src/Microsoft.AspNetCore.OData/Deltas/IDeltaSetItem.cs
@@ -16,5 +16,10 @@ public interface IDeltaSetItem
/// Gets the delta item kind.
///
DeltaItemKind Kind { get; }
+
+ ///
+ /// Gets or sets the annotation container to hold transient instance annotations.
+ ///
+ IODataInstanceAnnotationContainer TransientInstanceAnnotationContainer { get; set; }
}
}
diff --git a/src/Microsoft.AspNetCore.OData/IODataInstanceAnnotationContainer.cs b/src/Microsoft.AspNetCore.OData/IODataInstanceAnnotationContainer.cs
new file mode 100644
index 000000000..3cca11d9a
--- /dev/null
+++ b/src/Microsoft.AspNetCore.OData/IODataInstanceAnnotationContainer.cs
@@ -0,0 +1,61 @@
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) .NET Foundation and Contributors. All rights reserved.
+// See License.txt in the project root for license information.
+//
+//------------------------------------------------------------------------------
+
+using System.Collections.Generic;
+
+namespace Microsoft.AspNetCore.OData
+{
+ ///
+ /// Identifies a container for holding instance annotations. A default implementation is provided.
+ /// Customers can have their own implementation.
+ ///
+ public interface IODataInstanceAnnotationContainer
+ {
+ ///
+ /// Method to Add an Instance Annotation to the CLR type
+ ///
+ /// Name of Annotation
+ /// Value of Annotation
+ void AddResourceAnnotation(string annotationName, object value);
+
+ ///
+ /// Method to Add an Instance Annotation to a property
+ ///
+ /// Name of the property
+ /// Name of Annotation
+ /// Value of Annotation
+ void AddPropertyAnnotation(string propertyName, string annotationName, object value);
+
+ ///
+ /// Get an Instance Annotation from CLR Type
+ ///
+ /// Name of Annotation
+ /// Get Annotation value for the given annotation
+ object GetResourceAnnotation(string annotationName);
+
+ ///
+ /// Get an Instance Annotation from the Property
+ ///
+ /// Name of the Property
+ /// Name of the Annotation
+ /// Get Annotation value for the given annotation and property
+ object GetPropertyAnnotation(string propertyName, string annotationName);
+
+ ///
+ /// Get All Annotations from CLR Type
+ ///
+ /// Dictionary of string(annotation name) and object value(annotation value)
+ IDictionary GetResourceAnnotations();
+
+ ///
+ /// Get all Annotations for a Property
+ ///
+ /// Name of Property
+ /// Dictionary of string(annotation name) and object value(annotation value)
+ IDictionary GetPropertyAnnotations(string propertyName);
+ }
+}
diff --git a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml
index 9317c3ab6..0d13ca85d 100644
--- a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml
+++ b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml
@@ -1348,6 +1348,9 @@
DeltaKind for the objects part of the DeltaResourceSet Payload.
+
+
+
Clears the Delta and resets the underlying Entity.
@@ -1578,6 +1581,9 @@
The name of the relationship property on the parent object.
+
+
+
allows and tracks changes to delta added link.
@@ -1863,6 +1869,11 @@
Gets the delta item kind.
+
+
+ Gets or sets the annotation container to hold transient instance annotations.
+
+
The typed delta.
@@ -6236,6 +6247,55 @@
Gets the inner nested resource infos.
+
+
+ Identifies a container for holding instance annotations. A default implementation is provided.
+ Customers can have their own implementation.
+
+
+
+
+ Method to Add an Instance Annotation to the CLR type
+
+ Name of Annotation
+ Value of Annotation
+
+
+
+ Method to Add an Instance Annotation to a property
+
+ Name of the property
+ Name of Annotation
+ Value of Annotation
+
+
+
+ Get an Instance Annotation from CLR Type
+
+ Name of Annotation
+ Get Annotation value for the given annotation
+
+
+
+ Get an Instance Annotation from the Property
+
+ Name of the Property
+ Name of the Annotation
+ Get Annotation value for the given annotation and property
+
+
+
+ Get All Annotations from CLR Type
+
+ Dictionary of string(annotation name) and object value(annotation value)
+
+
+
+ Get all Annotations for a Property
+
+ Name of Property
+ Dictionary of string(annotation name) and object value(annotation value)
+
Provides extension methods for to add OData routes.
@@ -6273,6 +6333,59 @@
The given route pattern.
The .
+
+
+ Default implementation for IODataInstanceAnnotationContainer
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Method to Add an Instance Annotation to the CLR type
+
+ Name of Annotation
+ Value of Annotation
+
+
+
+ Method to Add an Instance Annotation to a property
+
+ Name of the property
+ Name of Annotation
+ Value of Annotation
+
+
+
+ Get an Instance Annotation from CLR Type
+
+ Name of Annotation
+ Get Annotation value for the given annotation
+
+
+
+ Get an Instance Annotation from the Property
+
+ Name of the Property
+ Name of the Annotation
+ Get Annotation value for the given annotation and property
+
+
+
+ Get All Annotations from CLR Type
+
+ Dictionary of string(annotation name) and object value(annotation value)
+
+
+
+ Get all Annotation for a Property
+
+ Name of Property
+ Dictionary of string(annotation name) and object value(annotation value)
+
Sets up default OData options for .
@@ -7048,6 +7161,16 @@
Looks up a localized string similar to The input key count '{0}' does not match the number '{1}' of the key of entity type '{2}'..
+
+
+ Looks up a localized string similar to Instance Annotation name cannot have a '@' as the first character and cannot have a '.' as first or last character..
+
+
+
+
+ Looks up a localized string similar to Instance Annotation should have a '.' in it and should not be the first or last character, usually in a format Namespace.TermName.
+
+
Looks up a localized string similar to The attribute routing template contains invalid segment '{0}'. The template string does not start with '{{' or ends with '}}'..
@@ -15211,5 +15334,105 @@
+
+
+ Represents a message type.
+
+
+
+
+ Code of message.
+
+
+
+
+ Actual message.
+
+
+
+
+ Severity of message.
+
+
+
+
+ Target of message.
+
+
+
+
+ Details of message.
+
+
+
+
+ Represents an exception type.
+
+
+
+
+ Represents a message type.
+
+
+
+
+ Represents the type of exception thrown during a data modification operation.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Represents the kind of data modification operation.
+
+
+
+
+ Represents the response code.
+
+
+
+
+ Enumerates the kind of data modification operations.
+
+
+
+
+ Represents an insert operation.
+
+
+
+
+ Represents an update operation.
+
+
+
+
+ Represents an insert or update operation if item already exists.
+
+
+
+
+ Represents a delete data modification operation.
+
+
+
+
+ Represents an action or function invocation.
+
+
+
+
+ Represents adding a link between entities.
+
+
+
+
+ Represents removing a link between entities.
+
+
diff --git a/src/Microsoft.AspNetCore.OData/ODataInstanceAnnotationContainer.cs b/src/Microsoft.AspNetCore.OData/ODataInstanceAnnotationContainer.cs
new file mode 100644
index 000000000..84e6b3554
--- /dev/null
+++ b/src/Microsoft.AspNetCore.OData/ODataInstanceAnnotationContainer.cs
@@ -0,0 +1,168 @@
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) .NET Foundation and Contributors. All rights reserved.
+// See License.txt in the project root for license information.
+//
+//------------------------------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+
+namespace Microsoft.AspNetCore.OData
+{
+ ///
+ ///Default implementation for IODataInstanceAnnotationContainer
+ ///
+ public class ODataInstanceAnnotationContainer
+ {
+ private IDictionary> instanceAnnotations;
+
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ODataInstanceAnnotationContainer()
+ {
+ instanceAnnotations = new Dictionary>();
+ }
+
+ ///
+ /// Method to Add an Instance Annotation to the CLR type
+ ///
+ /// Name of Annotation
+ /// Value of Annotation
+ public void AddResourceAnnotation(string annotationName, object value)
+ {
+ SetInstanceAnnotation(string.Empty, annotationName, value);
+ }
+
+ ///
+ /// Method to Add an Instance Annotation to a property
+ ///
+ /// Name of the property
+ /// Name of Annotation
+ /// Value of Annotation
+ public void AddPropertyAnnotation(string propertyName, string annotationName, object value)
+ {
+ if (string.IsNullOrEmpty(propertyName))
+ {
+ throw Error.ArgumentNull("propertyName");
+ }
+
+ SetInstanceAnnotation(propertyName, annotationName, value);
+ }
+
+ ///
+ /// Get an Instance Annotation from CLR Type
+ ///
+ /// Name of Annotation
+ /// Get Annotation value for the given annotation
+ public object GetResourceAnnotation(string annotationName)
+ {
+ return GetInstanceAnnotation(string.Empty, annotationName);
+ }
+
+ ///
+ /// Get an Instance Annotation from the Property
+ ///
+ /// Name of the Property
+ /// Name of the Annotation
+ /// Get Annotation value for the given annotation and property
+ public object GetPropertyAnnotation(string propertyName, string annotationName)
+ {
+ if (string.IsNullOrEmpty(propertyName))
+ {
+ throw Error.ArgumentNull("propertyName");
+ }
+
+ return GetInstanceAnnotation(propertyName, annotationName);
+ }
+
+ ///
+ /// Get All Annotations from CLR Type
+ ///
+ /// Dictionary of string(annotation name) and object value(annotation value)
+ public IDictionary GetResourceAnnotations()
+ {
+ return GetAllInstanceAnnotations(string.Empty);
+ }
+
+ ///
+ /// Get all Annotation for a Property
+ ///
+ /// Name of Property
+ /// Dictionary of string(annotation name) and object value(annotation value)
+ public IDictionary GetPropertyAnnotations(string propertyName)
+ {
+ if (string.IsNullOrEmpty(propertyName))
+ {
+ throw Error.ArgumentNull("propertyName");
+ }
+
+ return GetAllInstanceAnnotations(propertyName);
+ }
+
+ private void SetInstanceAnnotation(string propertyName, string annotationName, object value)
+ {
+ ValidateInstanceAnnotation(annotationName);
+
+ IDictionary annotationDictionary;
+ if (!instanceAnnotations.TryGetValue(propertyName, out annotationDictionary))
+ {
+ annotationDictionary = new Dictionary();
+ instanceAnnotations.Add(propertyName, annotationDictionary);
+ }
+
+ annotationDictionary[annotationName] = value;
+ }
+
+ private object GetInstanceAnnotation(string propertyName, string annotationName)
+ {
+ if (string.IsNullOrEmpty(annotationName))
+ {
+ throw Error.ArgumentNull("annotationName");
+ }
+
+ IDictionary annotationDictionary;
+ if (instanceAnnotations.TryGetValue(propertyName, out annotationDictionary))
+ {
+ object annotationValue;
+ if (annotationDictionary.TryGetValue(annotationName, out annotationValue))
+ {
+ return annotationValue;
+ }
+ }
+
+ return null;
+ }
+
+ private IDictionary GetAllInstanceAnnotations(string propertyName)
+ {
+ IDictionary annotationDictionary;
+ if (instanceAnnotations.TryGetValue(propertyName, out annotationDictionary))
+ {
+ return annotationDictionary;
+ }
+
+ return null;
+ }
+
+ private static void ValidateInstanceAnnotation(string annotationName)
+ {
+ if (string.IsNullOrEmpty(annotationName))
+ {
+ throw Error.ArgumentNull("annotationName");
+ }
+
+ if (annotationName[0] == '@' || annotationName[0] == '.' || annotationName[annotationName.Length - 1] == '.')
+ {
+ throw new ArgumentException(SRResources.InstanceAnnotationNotContain, annotationName);
+ }
+
+ if (!annotationName.Contains("."))
+ {
+ throw new ArgumentException(SRResources.InstanceAnnotationShouldContain, annotationName);
+ }
+ }
+ }
+}
diff --git a/src/Microsoft.AspNetCore.OData/Properties/SRResources.Designer.cs b/src/Microsoft.AspNetCore.OData/Properties/SRResources.Designer.cs
index 104f76a59..5d99aad86 100644
--- a/src/Microsoft.AspNetCore.OData/Properties/SRResources.Designer.cs
+++ b/src/Microsoft.AspNetCore.OData/Properties/SRResources.Designer.cs
@@ -798,6 +798,24 @@ internal static string InputKeyNotMatchEntityTypeKey {
}
}
+ ///
+ /// Looks up a localized string similar to Instance Annotation name cannot have a '@' as the first character and cannot have a '.' as first or last character..
+ ///
+ internal static string InstanceAnnotationNotContain {
+ get {
+ return ResourceManager.GetString("InstanceAnnotationNotContain", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Instance Annotation should have a '.' in it and should not be the first or last character, usually in a format Namespace.TermName.
+ ///
+ internal static string InstanceAnnotationShouldContain {
+ get {
+ return ResourceManager.GetString("InstanceAnnotationShouldContain", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to The attribute routing template contains invalid segment '{0}'. The template string does not start with '{{' or ends with '}}'..
///
diff --git a/src/Microsoft.AspNetCore.OData/Properties/SRResources.resx b/src/Microsoft.AspNetCore.OData/Properties/SRResources.resx
index 04406453f..7ddee563b 100644
--- a/src/Microsoft.AspNetCore.OData/Properties/SRResources.resx
+++ b/src/Microsoft.AspNetCore.OData/Properties/SRResources.resx
@@ -739,4 +739,10 @@
Unable to identify a unique property named '{0}'.
{0} = Property Name
+
+ Instance Annotation name cannot have a '@' as the first character and cannot have a '.' as first or last character.
+
+
+ Instance Annotation should have a '.' in it and should not be the first or last character, usually in a format Namespace.TermName
+
\ No newline at end of file
diff --git a/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt b/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt
index 1819f7059..2e003b1a0 100644
--- a/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt
@@ -219,6 +219,8 @@ Microsoft.AspNetCore.OData.Deltas.IDeltaDeletedResource.Reason.set -> void
Microsoft.AspNetCore.OData.Deltas.IDeltaSet
Microsoft.AspNetCore.OData.Deltas.IDeltaSetItem
Microsoft.AspNetCore.OData.Deltas.IDeltaSetItem.Kind.get -> Microsoft.AspNetCore.OData.Deltas.DeltaItemKind
+Microsoft.AspNetCore.OData.Deltas.IDeltaSetItem.TransientInstanceAnnotationContainer.get -> Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer
+Microsoft.AspNetCore.OData.Deltas.IDeltaSetItem.TransientInstanceAnnotationContainer.set -> void
Microsoft.AspNetCore.OData.Deltas.ITypedDelta
Microsoft.AspNetCore.OData.Deltas.ITypedDelta.ExpectedClrType.get -> System.Type
Microsoft.AspNetCore.OData.Deltas.ITypedDelta.StructuredType.get -> System.Type
@@ -656,7 +658,22 @@ Microsoft.AspNetCore.OData.Formatter.Wrapper.ODataResourceWrapper.IsDeletedResou
Microsoft.AspNetCore.OData.Formatter.Wrapper.ODataResourceWrapper.NestedResourceInfos.get -> System.Collections.Generic.IList
Microsoft.AspNetCore.OData.Formatter.Wrapper.ODataResourceWrapper.ODataResourceWrapper(Microsoft.OData.ODataResourceBase resource) -> void
Microsoft.AspNetCore.OData.Formatter.Wrapper.ODataResourceWrapper.Resource.get -> Microsoft.OData.ODataResourceBase
+Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer
+Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer.AddPropertyAnnotation(string propertyName, string annotationName, object value) -> void
+Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer.AddResourceAnnotation(string annotationName, object value) -> void
+Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer.GetPropertyAnnotation(string propertyName, string annotationName) -> object
+Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer.GetPropertyAnnotations(string propertyName) -> System.Collections.Generic.IDictionary
+Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer.GetResourceAnnotation(string annotationName) -> object
+Microsoft.AspNetCore.OData.IODataInstanceAnnotationContainer.GetResourceAnnotations() -> System.Collections.Generic.IDictionary
Microsoft.AspNetCore.OData.ODataApplicationBuilderExtensions
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer.AddPropertyAnnotation(string propertyName, string annotationName, object value) -> void
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer.AddResourceAnnotation(string annotationName, object value) -> void
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer.GetPropertyAnnotation(string propertyName, string annotationName) -> object
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer.GetPropertyAnnotations(string propertyName) -> System.Collections.Generic.IDictionary
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer.GetResourceAnnotation(string annotationName) -> object
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer.GetResourceAnnotations() -> System.Collections.Generic.IDictionary
+Microsoft.AspNetCore.OData.ODataInstanceAnnotationContainer.ODataInstanceAnnotationContainer() -> void
Microsoft.AspNetCore.OData.ODataJsonOptionsSetup
Microsoft.AspNetCore.OData.ODataJsonOptionsSetup.Configure(Microsoft.AspNetCore.Mvc.JsonOptions options) -> void
Microsoft.AspNetCore.OData.ODataJsonOptionsSetup.ODataJsonOptionsSetup() -> void
@@ -1472,6 +1489,35 @@ Microsoft.AspNetCore.OData.Routing.Template.ValueSegmentTemplate
Microsoft.AspNetCore.OData.Routing.Template.ValueSegmentTemplate.Segment.get -> Microsoft.OData.UriParser.ValueSegment
Microsoft.AspNetCore.OData.Routing.Template.ValueSegmentTemplate.ValueSegmentTemplate(Microsoft.OData.Edm.IEdmType previousType) -> void
Microsoft.AspNetCore.OData.Routing.Template.ValueSegmentTemplate.ValueSegmentTemplate(Microsoft.OData.UriParser.ValueSegment segment) -> void
+Org.OData.Core.V1.DataModificationExceptionType
+Org.OData.Core.V1.DataModificationExceptionType.DataModificationExceptionType(Org.OData.Core.V1.DataModificationOperationKind failedOperation) -> void
+Org.OData.Core.V1.DataModificationExceptionType.FailedOperation.get -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationExceptionType.ResponseCode.get -> short
+Org.OData.Core.V1.DataModificationExceptionType.ResponseCode.set -> void
+Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationOperationKind.Delete = 3 -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationOperationKind.Insert = 0 -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationOperationKind.Invoke = 4 -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationOperationKind.Link = 5 -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationOperationKind.Unlink = 6 -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationOperationKind.Update = 1 -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.DataModificationOperationKind.Upsert = 2 -> Org.OData.Core.V1.DataModificationOperationKind
+Org.OData.Core.V1.ExceptionType
+Org.OData.Core.V1.ExceptionType.ExceptionType() -> void
+Org.OData.Core.V1.ExceptionType.MessageType.get -> Org.OData.Core.V1.MessageType
+Org.OData.Core.V1.ExceptionType.MessageType.set -> void
+Org.OData.Core.V1.MessageType
+Org.OData.Core.V1.MessageType.Code.get -> string
+Org.OData.Core.V1.MessageType.Code.set -> void
+Org.OData.Core.V1.MessageType.Details.get -> string
+Org.OData.Core.V1.MessageType.Details.set -> void
+Org.OData.Core.V1.MessageType.Message.get -> string
+Org.OData.Core.V1.MessageType.Message.set -> void
+Org.OData.Core.V1.MessageType.MessageType() -> void
+Org.OData.Core.V1.MessageType.Severity.get -> string
+Org.OData.Core.V1.MessageType.Severity.set -> void
+Org.OData.Core.V1.MessageType.Target.get -> string
+Org.OData.Core.V1.MessageType.Target.set -> void
override Microsoft.AspNetCore.OData.Abstracts.ETagActionFilterAttribute.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext actionExecutedContext) -> void
override Microsoft.AspNetCore.OData.Abstracts.NonValidatingParameterBindingAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource
override Microsoft.AspNetCore.OData.Batch.ChangeSetRequestItem.SendRequestAsync(Microsoft.AspNetCore.Http.RequestDelegate handler) -> System.Threading.Tasks.Task