Odata没有找到NavigationLink工厂我目前正在开发一个mvc4webapiodata服务,想在用户列表中返回一个用户列表。当我想获得用户时,我收到以下错误:错误:'ObjectContent`1'类型无法序列化内容类型'application/json;字符集=utf-8'。System.InvalidOperationException未从实体集“用户”上的实体类型“MvcWebRole1.Models.User”中找到导航属性“语言”的NavigationLink工厂。尝试在EntitySetConfiguration上调用HasNavigationPropertyLink。参数名称:System.Web.Http.OData.Builder.EntitySetLinkBuilderAnnotation.BuildNavigationLink(EntityInstanceContextinstanceContext,IEdmNavigationPropertynavigationProperty,ODataMetadataLevelmetadataLevel)System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteNavigationLinkscontext,ODataWriter编写器,ODataSerializerContextwriteContext)在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(对象图,IEnumerable`1属性包,ODataWriter编写器,ODataSerializerContextwriteContext)在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(对象图,ODataWriter编写器,ODataSerializerContextwriteContext)在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(对象图,ODataWriter编写器,ODataSerializerContextwriteContext)在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(对象图,ODataWriter编写器,ODataSerializerContextwriteContext)在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObject(Objectgraph,ODataMessageWritermessageWriter,ODataSerializerContextwriteContext)atSystem.Web.Http.OData.Formatter.ODataMediaTypeFormatter.c__DisplayClassa.b__9()atSystem.Threading.Tasks.TaskHelpers.RunSynchronously(Actionaction,CancellationTokentoken)我的用户看起来像这样:publicclassUser{[Key]publicintUserId{get;放;}民众}publicstringLastName{get;放;}publicstring用户名{get;放;}公共字符串密码{得到;放;}publicvirtualICollectionLanguages{get;放;}publicUser(){Languages=newList();我的OData用户控件如下所示:publicclassUsersController:EntitySetController{WorldChatContextdb=newWorldChatContext();publicoverrideIQueryableGet(){returndb.Users.AsQueryable();}protectedoverrideUserGetEntityByKey(intkey){returndb.Users.FirstOrDefault(p=>p.UserId==key);}publicoverrideHttpResponseMessagePost(Userentity){db.Users.Add(entity);db.SaveChanges();返回base.Post(entity);我正在调用我在路由中设置的以下url:http://127.0.0.1:81/odata/Users:http://127.0.0.1:81/odata/Users:http://127.0.0.1:81/odata/Users如果我在我的用户模型中评论导航属性,它会起作用我做错了什么?我试过将[Serializable,KnownType(typeof(Language))]放在我的用户类之上,但由于某种原因我不能使用KnownType。如何使用此导航属性使我的OData工作?您缺少语言的实体集。导航属性指向实体并且必须绑定到实体集。在ModelBuilder代码中,添加此行以解决问题。builder.EntitySet("语言");这样做是为了创建实体集“语言”。约定ModelBuilder将导航属性绑定到实体集(如果有)。所以实体类型User上的导航属性Languages会绑定到实体集languages上。以上是C#学习教程:Odata没有找到NavigationLink工厂分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
