entity-framework-4 – 首先在实体框架代码中使用导航属性
|
语境: > Code First,Entity Framework 4.3.1; public IQueryable<Topic> GetTopics()
{
// return DbContext.Topics; // OK
return DbContext.Topics.Include("Creator"); //With Exception
}
>结果:“w3wp.exe中出现未处理的microsoft .net框架异常” 这里的问题似乎是:我不应该在两个实体中添加导航属性(导致循环引用?),如果我删除用户类中的CreatedTopics导航属性,它将再次正常. 所以,在上面列出的类似上下文中,这是我的问题: >在1对多关系的情况下如何处理导航属性; 我看过很多相关的帖子,但还不够清楚:(, 谢谢你的帮助! 院长 解决方法这不是代码优先或EF的问题 – 这是序列化的问题.用于将对象图转换为Web API消息中传递的某些表示形式的序列化程序默认情况下无法使用循环引用.根据您要使用的消息格式,Web API默认使用不同的序列化程序 – here更多地是关于Web API使用的默认序列化程序以及如何更改它的方式.下面的文本假设您正在使用DataContractJsonSerializer或DataContractSerializer(应该是XML序列化的默认值),但JSON.NET也是可以的(对于JSON序列化应该是默认的 – JSON序列化可以切换到DataContractJsonSerializer但默认的序列化程序更好) .那么你能做什么?您可以告诉序列化程序它应该通过使用DataContract(IsReference = true)标记您的类来跟踪这些循环引用,并使用DataMember属性标记每个传递的属性(查看链接文章以获取如何使用JSON.NET实现它的描述).这将允许序列化器正确识别循环,并且序列化在理论上将成功.理论上因为这也要求不使用延迟加载.否则,您可以序列化比预期更多的数据(在某些灾难性情况下,它可能导致序列化数据库的整个内容). 当您使用延迟加载序列化实体图时,您会对主题及其创建者进行搜索,但序列化也会访问CreatedTopics property =>所有相关主题都是延迟加载和序列化处理,序列化继续访问所有新加载主题的Creator!此过程将继续,直到没有其他对象延迟加载.因此,在序列化实体时不应使用延迟加载. 其他选项是从序列化中排除反向引用.你只需要序列化Creator.您不需要序列化CreatedTopics,因此您可以使用IgnoreDataMember属性(JSONIgnore for JSON.NET)标记该属性.问题是,如果您还使用Web API操作来返回User及其所有CreateTopics,则由于该属性,这将无效. 最后一个选项不使用实体.此选项通常用于Web服务,您可以在其中创建满足特定操作要求的特殊DTO对象,并处理操作中实体和DTO之间的转换(可以借助AutoMapper等工具). 处理一对一,一对多或多对多关系之间没有区别.如果双方都有导航属性,则必须始终处理此问题. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 我可以在Razor中使用@helper语法返回一个字符串吗?
- asp.net-mvc – 从视图到控制器POST信用卡数据是否安全?
- asp.net – 什么时候在普通的HTML上使用runat =“server”
- 在Asp.net中加载平衡,在开发时我应该考虑什么?
- asp.net-mvc – ASP.NET MVC中的动态(运行时生成)表单
- asp.net-mvc – ASP.NET MVC – 在哪里抛出异常?
- asp.net – 通过使用JQuery调用Web服务可能存在哪些威胁,如
- asp.net – ActivationManager构建过程中的异常?
- asp.net – 如何在迭代字典项时更新值?
- AspNetCore.Authentication.JwtBearer失败,没有SecurityTok
- asp.net – 必填字段验证器中的数字验证
- asp.net-mvc – 使用Razor视图引擎 – 如何格式化
- ASP.NET:请求cookie对于域名为null?
- asp.net-mvc-3 – SignalR多个聊天室
- asp.net-mvc – 如何使用jQuery UI Datepicker与
- asp.net – 如果表单字段为空,如何将NULL插入数据
- asp.net – Infragistics WebGrid与Telerik网格
- asp.net-mvc – 将WebForm视图引擎标记转换为Raz
- asp.net – 我应该花费我的努力实现knockoutjs或
- asp.net-web-api – 如何告诉RavenDB忽略属性而不
