我已经完成了尽职调查,但我所尝试的一切似乎都不对。我的情景:
public class Stuff{
public int StuffTypeA { get; set; }
public int StuffTypeB { get; set; }
public Creature Creature { get; set; }
}
public class Creature{
public virtual Stuff MyStuff { get; set; }
}
现在,一个生物可以有东西,但不一定。基于这里和其他地方的帖子,我花了一些时间玩流体API,我可以在两者之间建立各种关系。
最终看起来最像我期望的是:
modelBuilder.Entity<Creature>()
.HasOptional(e => e.MyStuff)
.WithOptionalPrincipal(x => x.Creature);
这不会在Creature表中创建任何内容,也不会在Stuff表中创建外键Creature_ID - 正如我所期望的那样。但是,每次创建新生物时,都会使用默认值将一行写入Stuff表。这不是我想要的。在我的整个生物世界中,只有一小部分实际上会有东西所以所有这些行似乎都是一个很大的浪费。如果我正在设计数据库,我会像上面的模型构建器一样设计它,但是EF并没有像我期望的那样使用/交互它。
我是不是真的正确地使用流体api?我怎么说,“只有在实际存储数据时才创建可选行”?