gpt4 book ai didi

c# - 禁用 Entity Framework 代理创建

转载 作者:可可西里 更新时间:2023-11-01 09:00:05 26 4
gpt4 key购买 nike

根据我的阅读,设置 ProxyCreationEnabled = false 将阻止更改跟踪和延迟加载。但是,我不清楚更改跟踪涵盖的内容。

如果我禁用它并从数据库中获取一个实体,对其进行更改并提交,那么这些更改将被保存。我仍然能够从 ChangeTracker 获取修改后的条目:

ChangeTracker.Entries<IAuditable>().Where(x => x.State == EntityState.Modified).ToList()

如果我禁用了代理创建,这是否可行?我想禁用它,但我想清楚我要禁用的是什么。

最佳答案

我可以确认在 EF 中将 ProxyCreationEnabled 设置为 false 不会影响更改跟踪。您实际上对这个问题很感兴趣,因为我认为我知道答案,但为了确认我创建了一个快速测试用例。

请参阅下面代表有效场景的示例代码:

namespace EFCTTest
{
class Program
{
static void Main(string[] args)
{
var context = new MyContext();
context.Tests.First().Test = "Edited";

var models = context.ChangeTracker.Entries<TestModel>().Where(x => x.State == EntityState.Modified).ToList();
foreach(var model in models)
Console.WriteLine($"From {model.OriginalValues["Test"]} to {model.CurrentValues["Test"]}");

Console.ReadLine();
}
}

public class MyContext : DbContext
{
public MyContext()
{
Configuration.ProxyCreationEnabled = false;
}

public DbSet<TestModel> Tests { get; set; }
}

public class TestModel
{
public int Id { get; set; }
public string Test { get; set; }
}
}

当您对另一个模型使用 virtual 导航属性时,禁用代理生成唯一会影响的是 EF 的延迟加载功能。 Change Tracker 独立于底层 ObjectContext 本身。

对于与更改跟踪相关的完整答案,可能值得注意的是 AutoDetectChangesEnabled 似乎是唯一会直接影响更改跟踪功能的设置,需要您调用 DetectChanges() 如果您需要使用您的示例代码。

关于c# - 禁用 Entity Framework 代理创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40614995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com