c# – EF 6懒惰加载已禁用,但子记录载荷无论如何
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – EF 6懒惰加载已禁用,但子记录载荷无论如何,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1800字,纯文字阅读大概需要3分钟。
内容图文
![c# – EF 6懒惰加载已禁用,但子记录载荷无论如何](/upload/InfoBanner/zyjiaocheng/787/58cbe69656f34b7397ba085008e9c26f.jpg)
我先使用EF6代码.有两个表,Lesson和LessonSections. LessonSections表具有Lesson.Id的外键
这是Lesson类,没有删除任何重要字段:
public partial class Lesson
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Lesson()
{
LessonSections = new HashSet<LessonSection>();
}
[StringLength(50)]
public string Id { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<LessonSection> LessonSections { get; set; }
}
以下是我启动数据模型的方法:
var db = new Touch_Type_Trainer_DB.DataModel();
db.Configuration.ProxyCreationEnabled = false;
db.Configuration.LazyLoadingEnabled = false;
在我第一次调用数据库以检索数据库中的第一课后,生成的对象没有LessonSections
然后我再次调用将这些部分检索到一个单独的对象中. (它们必须位于单独的对象中,因为我想将它们序列化为JSON字符串,并且如果我使用标准EF LazyLoading,则序列化程序会停止Lesson和LessonSections之间的循环引用.)
现在我的原始对象有两个从数据库加载的部分,即使我从未访问过LessonSections属性,即使LazyLoadingEnabled设置为False!
为什么要加载LessonSections?
编辑:
我正在使用Newtonsoft将我的对象序列化为JSON字符串.也许我应该设置Newtonsoft中的配置设置,以便它不会陷入循环引用问题?
此外,我确实希望为大多数代码启用LazyLoading,而不是为序列化部分启用.
解决方法:
这对你来说是一个问题,还是你只是好奇它为什么会发生?
DBContext会跟踪您的所有引用.当您加载这些部分时,它知道课程中有对它们的引用,并为您连接它.
你可以通过断开对象,或从不同的dbcontext加载部分来阻止这种情况
myDbContext.Entry(someLesson).State=Detached;
有关序列化问题,请参阅此Q& A How Do You “Really” Serialize Circular Referencing Objects With Newtonsoft.Json?
要么
http://johnnycode.com/2012/04/10/serializing-circular-references-with-json-net-and-entity-framework/
内容总结
以上是互联网集市为您收集整理的c# – EF 6懒惰加载已禁用,但子记录载荷无论如何全部内容,希望文章能够帮你解决c# – EF 6懒惰加载已禁用,但子记录载荷无论如何所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。