我有一个像某些型号的波纹管:EF核心返回null关系,直到直达
public class Mutant
{
public long Id { get; set; }
...
// Relations
public long OriginalCodeId { get; set; }
public virtual OriginalCode OriginalCode { get; set; }
public int DifficultyLevelId { get; set; }
public virtual DifficultyLevel DifficultyLevel { get; set; }
}
和
public class OriginalCode
{
public long Id { get; set; }
...
// Relations
public virtual List<Mutant> Mutants { get; set; }
public virtual List<OriginalCodeInputParameter> OriginalCodeInputParameters { get; set; }
}
,并在DBContext
的OnModelCreating
我做了这样的关系:
modelBuilder.Entity<Mutant>()
.HasOne(m => m.OriginalCode)
.WithMany(oc => oc.Mutants)
.HasForeignKey(m => m.OriginalCodeId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
modelBuilder.Entity<Mutant>()
.HasOne(m => m.DifficultyLevel)
.WithMany(dl => dl.Mutants)
.HasForeignKey(m => m.DifficultyLevelId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
现在当我要求突变体时,OriginalCode为空:
,但只要我请求OriginalCode
就像波纹管:
那么突变的OriginalCode
领域将是不为空:
是什么原因,我该如何解决?
TG。
正如你所猜想的,我想控制第一个行为。但仍然有一个很大的问题。你提到的这种方式,我应该明确地解决待填补的关系,是真的吗? – ConductedClever
确实。你必须用几个'Include' /'ThenInclude'方法来指定你想要“包含”的每一个。AFAIK有一些计划将来会自动进行此操作,但现在这是唯一的选择。 –
猜猜怎么样,从来不知道 - 例如在你的EF核心标签中看到一些问题 - [我可以阻止实体框架核心使用部分数据填充我的结果吗?](http://stackoverflow.com/questions/42310340/can-i-stop-entity-framework-core-from-populating-my-result-with-partial-data):) –