如何禁用懒惰加载,实体框架4.1使用代码迁移配置
本文关键字:代码 配置 迁移 框架 何禁用 加载 实体 | 更新日期: 2023-09-27 18:21:40
这是我用来配置数据库的代码:
internal sealed class Configuration : DbMigrationsConfiguration<DataStore>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
SetSqlGenerator("System.Data.SqlServerCe.4.0", new SqlCeModelColumnBugWorkaroundProvider());
}
protected override void OnSeed(DbContext context)
{
context.Configuration.LazyLoadingEnabled = false;
new SeedData(context as DataStore);
}
public static void DoDatabaseInitialisation()
{
var setting = ConfigurationManager.AppSettings["RequiresDbUpdate"];
var requiresDbUpdate = bool.Parse(string.IsNullOrEmpty(setting) ? "false" : setting);
if (! requiresDbUpdate) return;
//otherwise create/update the database
var dbMigrator = new DbMigrator(new Configuration());
dbMigrator.Update();
ResetDbUpdateRequired("/");
}
private static void ResetDbUpdateRequired(string appPath)
{
var hostName = WebHelper.GetHost(false);
if (!hostName.Contains("localhost"))
WebHelper.UpdateWebConfigAppSetting("RequiresDbUpdate", "false", appPath);
}
如果有人知道怎么做,请告诉我。我也在模型类上尝试过非虚拟属性,但这似乎没有任何区别。
我一直使用
context.Configuration.LazyLoadingEnabled = false;
在使用DbContext方法之前调用它,等效的设置是:
(context as IObjectContextAdapter).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
Max的解决方案离要点不远。事实上促使我去另一个地方寻找解决方案。看起来你可能在使用EF Code First,是吗?因此,在上下文的初始化中,存在"OnModelCreated"的覆盖。
在这个方法中,我只需调用并设置属性,就可以解决所有问题。
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.Configuration.LazyLoadingEnabled = false;
}
我的模特现在更讨人喜欢了。懒惰的加载很棒。。。但当你不想要的时候就不行了。当你开始有循环引用的时候,这简直太荒谬了。