似乎延迟加载与代码优先的工作方式不同,因为它与 db-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);
代码优先模型的能力是否不如 db 优先模型?我会为它分配 nav 属性和 pkey 似乎很奇怪,这让我觉得我的配置有误。
以下应该工作吗?
var x = _db.TestCases.Create();
x.ProjectId = 7;
Console.WriteLine(x.Project.Name); //this never seems to work
会很好,因为 x 也知道它附加了哪个上下文,我原以为它可以处理这种情况。
谢谢。