遅延読み込みは、db-first と同じように code-first では機能しないようです。
検討:
public class Project
{
[Key]
public long ProjectId { get; set; }
[Required]
[MaxLength(60)]
public virtual string Name { get; set; }
}
と:
public class TestCase
{
[Key]
public long TestCaseId { get; set; }
[Required]
[ForeignKey("ProjectId")]
public virtual Project Project { get; set; }
public virtual long ProjectId { get; set; }
}
この DbContext では:
public class TestDbContext : DbContext
{
public TestDbContext() : base("TestIckle")
{
}
public DbSet<Project> Projects { get; set; }
public DbSet<TestCase> TestCases { get; set; }
}
私のコードでこれをしようとすると、うまくいきません:
Console.WriteLine(_db.Configuration.LazyLoadingEnabled); //prints true
TestDbContext _db = new TestDbContext();
var testcase = _db.TestCases.Create();
testcase.Project = _db.Projects.Find(7);
//the following line outputs 0 with Code-First
//the following line outputs 7 with DB-First
Console.WriteLine(testcase.ProjectId);
コード優先モデルは、データベース優先モデルよりも機能が劣りますか? nav プロパティとそれに pkey を割り当てたのは奇妙に思えます。
以下は機能するはずですか?
var x = _db.TestCases.Create();
x.ProjectId = 7;
Console.WriteLine(x.Project.Name); //this never seems to work
x もどのコンテキストがアタッチされているかを知っているので、この状況を処理できたと思います。
ありがとう。