DisablingEntityFrameworkProxyCreation根据我的阅读,设置ProxyCreationEnabled=false将阻止更改跟踪和延迟加载。但是,我不清楚跟踪了哪些更改。如果我禁用它并从数据库中获取实体,对其进行更改并提交,更改将被保存。我还能够从ChangeTracker获取修改后的条目:ChangeTracker.Entries().Where(x=>x.State==EntityState.Modified).ToList()当我禁用代理创建时,这是否有效?我想禁用它,但我想明确说明我要禁用的内容。更改跟踪和代理创建是两种不同的场景。如果您需要禁用更改跟踪,则必须按如下所示进行。公共类YourContext:DbContext{publicYourContext(){this.Configuration.AutoDetectChangesEnabled=false;那么你不能做ChangeTracker.Entries().Where(x=>x.State==EntityState.Modified).ToList()。如果您需要禁用代理创建,您必须在上下文的构造函数中这样做,如下所示。publicclassYourContext:DbContext{publicYourContext(){this.Configuration.ProxyCreationEnabled=false;}publicDbSet博客{get;放;}publicDbSetPosts{get;放;}}代理创建机制用于支持关系的延迟加载。EF不会为没有任何内容的类型创建代理。换句话说,如果你的POCO类没有虚拟属性,禁用与否都没有影响。如果您正在序列化您的实体,那么请考虑关闭代理和延迟加载,因为反序列化代理可能很棘手。您可以在此处阅读更多相关信息:使用代理的实体框架我可以确认在EF中将ProxyCreationEnabled设置为false不会影响更改跟踪。你真的对这个问题感兴趣吗,因为我想我知道答案,但为了确认我创建了一个快速测试用例。见下面代表工作场景的示例代码:context.Tests.First().Test="已编辑";varmodels=context.ChangeTracker.Entries().Where(x=>x.State==EntityState.Modified).ToList();foreach(varmodelinmodels)Console.WriteLine($"从{model.OriginalValues["Test"]}到{model.CurrentValues["Test"]}");控制台.ReadLine();}}publicclassMyContext:DbContext{publicMyContext(){Configuration.ProxyCreationEnabled=false;}公共DbSet测试{得到;放;}}publicclassTestModel{publicintId{get;放;}公共字符串测试{得到;放;禁用代理生成唯一会影响的是当您将虚拟导航属性用于其他模型加载函数时EF的延迟。ChangeTracker是自包含的,从底层ObjectContext本身开始工作。有关更改跟踪的完整答案,可能值得注意的是,AutoDetectChangesEnabled似乎是唯一直接影响更改跟踪功能的设置,如果您需要使用示例代码,则需要调用DetectChanges()。以上就是C#学习教程的全部内容:禁用实体框架代理创建和共享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
