Unable to cast object of type 'Microsoft.OData.Edm.Csdl.CsdlSemantics.UnresolvedType' to type 'Microsoft.OData.Edm.IEdmC
Tag : chash , By : turret
Date : March 29 2020, 07:55 AM
this will help The problem turned out to be an upgrade from: OData Client T4 Template ver. 2.2.0 to OData Client T4 Template ver. 2.4.0 Between the versions a few new items are added that make your old *.TTInclude files useless. <#@ Import Namespace="Microsoft.OData.Edm.Vocabularies.Community.V1" #>
tmp.FindDeclaredValueTerm(AlternateKeysVocabularyConstants.AlternateKeys) != null)
internal abstract void WriteEntityTypeAttribute();
|
WebApi OData query with complex type ignores nested values
Date : March 29 2020, 07:55 AM
I think the issue was by ths following , Using Entity Framework I created an DbContext. The Dbcontext is created within a WebApi project. One of the tables from the DbContext represents buildings. The location is represented as a Geography type in the database. I need to query the buildings and sort the result by the distance to a given location. , You should have $expand=Building
[EnableQuery]
public IHttpActionResult GetBuildingDistances()
{
...
var query =
db.t_building.Select(
x =>
new BuildingDistance
{
Id = x.id,
Street = x.location_street,
Building = x,
Distance = x.GeoLocation.Distance(myLocation)
});
return Ok(query as IQueryable<BuildingDistance);
}
|
Odata v4 error "Does not support untyped value in non-open type"
Tag : rest , By : user183842
Date : March 29 2020, 07:55 AM
may help you . I've experienced this error before and it's caused by passing a property of a JSON object that doesn't exist on the data model. For example, given the data model: public class User
{
public long UserId { get; set; }
public string UserName { get; set; }
}
public IHttpActionResult Post(User user)
{
"UserId": "0",
"UserName": "test",
"UserPassword": "test"
}
{
"error": {
"code": "",
"message": "The request is invalid.",
"innererror": {
"message": "user : Does not support untyped value in non-open type.\r\n",
"type": "",
"stacktrace": ""
}
}
}
|
How to $select on OData Open Data Type? Query not valid error
Tag : chash , By : deanschang
Date : March 29 2020, 07:55 AM
Any of those help Thank you for answering me, saying that it should work, it made look harder. As Sam Xu noted, it works with the key "foo", and I tested it on my dict and it worked. It made me think that OData doens't take a number as a key, and it doesn't. I solved my problem by appending the letter 'a' in front of each year number, and know it selects just fine.
|
How to support a nested open complex type in the OData C# driver?
Tag : chash , By : Eran Yahav
Date : March 29 2020, 07:55 AM
seems to work fine I'm in the same boat as you. I need to expose some data as pure JSON. This is a working solution using the ODataUntypedValue class. It serializes to what you would expect. I tested it with your models and mine. Implement a MongoDataSerializer class: public class MongoDataSerializer: ODataResourceSerializer
{
public MongoDataSerializer(ODataSerializerProvider serializerProvider)
: base(serializerProvider)
{
}
/// <summary>
/// Serializes the open complex type as an <see cref="ODataUntypedValue"/>.
/// </summary>
/// <param name="graph"></param>
/// <param name="expectedType"></param>
/// <param name="writer"></param>
/// <param name="writeContext"></param>
public override void WriteObjectInline(
object graph,
IEdmTypeReference expectedType,
ODataWriter writer,
ODataSerializerContext writeContext)
{
// This cast is safe because the type is checked before using this serializer.
var mongoData = (MongoData)graph;
var properties = new List<ODataProperty>();
foreach (var item in mongoData.Document)
{
properties.Add(new ODataProperty
{
Name = item.Key,
Value = new ODataUntypedValue
{
RawValue = JsonConvert.SerializeObject(item.Value),
},
});
}
writer.WriteStart(new ODataResource
{
TypeName = expectedType.FullName(),
Properties = properties,
});
writer.WriteEnd();
}
}
public class CustomODataSerializerProvider : DefaultODataSerializerProvider
{
private readonly MongoDataSerializer mongoDataSerializer;
public CustomODataSerializerProvider(
IServiceProvider odataServiceProvider)
: base(odataServiceProvider)
{
this.mongoDataSerializer = new MongoDataSerializer(this);
}
public override ODataEdmTypeSerializer GetEdmTypeSerializer(IEdmTypeReference edmType)
{
if (edmType.FullName() == typeof(MongoData).FullName)
{
return this.mongoDataSerializer;
}
return base.GetEdmTypeSerializer(edmType);
}
}
app.UseMvc(options =>
{
var model = builder.GetEdmModel();
options
.MapODataServiceRoute(
"odata",
"odata",
b => b
.AddService(Microsoft.OData.ServiceLifetime.Scoped, s => model)
.AddService<IEnumerable<IODataRoutingConvention>>(
Microsoft.OData.ServiceLifetime.Scoped,
s => ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", options))
.AddService<ODataSerializerProvider, CustomODataSerializerProvider>(Microsoft.OData.ServiceLifetime.Singleton));
}
|