私はEF 6と遅延ロードを扱っています。エンティティフレームワーク6 db開始によるレイジーロード
class MainPrograme
{
static void Main(string[] args)
{
ProgramContext _dbContext = new ProgramContext();
_dbContext.Programs.Add(new Program
{
SecondProgram = new SecondProgram
{
Title = "Demo"
}
});
_dbContext.SaveChanges();
var item = _dbContext.Programs.Find(1);
}
}
私は
Configuration.LazyLoadingEnabled = false;
と遅延読み込みを無効にしたらそれが正常に動作します。リレーショナルオブジェクトはロードされません。 item.SecondProgram
はnull
です。完璧。しかし、データベースを削除すると、db initiationが新しいdbを設定して、遅延ロードが機能しなくなります。上記のプログラムをもう一度実行すると、遅延ロードが正常に機能します。あなたはどんなアイデアを持っていますか?ありがとう。データベースが存在しない場合は
はここに私のコンストラクタ
public ProgramContext()
: base("Data Source=xxx;")
{
Configuration.LazyLoadingEnabled = false;
if (!Database.Exists())
{
Task.Run(InitializeDatabase).Wait();
}
}
で、セットアップデシベルを意志と私は同じコンテキストインスタンスでDBクエリを実行する場合、遅延読み込みに失敗したInitializeDatabase。私が新しいコンテキストオブジェクトを作成し、それを介してdbをクエリすると、遅延読み込みが機能します。
アップデート - 以下
私の完全なコンソールプログラムです。それを実行し、項目がある場合はSecondProgramプロパティをチェックします。それはnullではありません。レイジーローディングはそこでは機能しませんでした。次に、データベースを削除せずにプログラムを再実行し、SecondProgramプロパティを再度チェックします。 isは期待通りにnullです。なぜ最初の実行でnullではなかったのですか?示すように
class MainPrograme
{
static void Main(string[] args)
{
ProgramContext _dbContext = new ProgramContext();
_dbContext.Programs.Add(new Program
{
SecondProgram = new SecondProgram
{
Title = "Demo"
}
});
_dbContext.SaveChanges();
var item = _dbContext.Programs.Find(1);
}
}
public class Program
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<SecondProgram> SecondPrograms { get; set; }
public virtual SecondProgram SecondProgram { get; set; }
}
public class SecondProgram
{
public int Id { get; set; }
public string Title { get; set; }
}
public class ProgramContext : DbContext
{
public ProgramContext()
: base("Data Source=XXX;Initial Catalog=MyContainer;Integrated Security=True;")
{
Configuration.LazyLoadingEnabled = false;
}
public DbSet<Program> Programs { get; set; }
}
サンプルシナリオを追加して出力できますか? – Developer
私はこの質問を理解していませんが、 'Configuration.LazyLoadingEnabled'はコンテキストベースです。だから、遅延ロードを望まないすべての 'DbContext'に対して(DbContextを作成するたびに)呼び出す必要があります。 –
遅延読み込みを望まない場合は、 'DbContext'コンストラクタでfalseに設定できます。 –