C# 实体框架一对零或始终创建一个可选表行
我已经做了尽职调查,但我尝试的一切似乎都不对。我的设想:C# 实体框架一对零或始终创建一个可选表行,c#,entity-framework,C#,Entity Framework,我已经做了尽职调查,但我尝试的一切似乎都不对。我的设想: 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; } }
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);
modelBuilder.Entity()
.has可选(e=>e.MyStuff)
.具有可选原则(x=>x.1);
这在生物表中不创建任何内容,在填充表中创建外键bioture_ID-这正是我所期望的。然而,每次我创建一个新的生物时,一行会以默认值写入到Stuff表中。这不是我想要的。在我整个宇宙的生物中,只有一小部分会有东西,所以所有这些毫无意义的排列看起来就像是一个巨大的浪费。如果我在设计数据库,我会像上面的modelBuilder那样设计它,但是EF没有像我预期的那样使用它/与它交互
我是否真的没有正确地执行流体api?我怎么说,“只有在实际有数据要存储的情况下才创建可选行” 当您将
生物
实例添加到数据库时,MyStuff
的值是多少?如果您不希望它创建Stuff
记录,则它需要为null,因为它正在创建记录这一事实意味着它是Stuff
的默认实例。我希望我可以将此标记为答案。你是对的。我因为树木而错过了森林……或者类似的东西。正如您所指出的,我实际上是在实例化东西,尽管我并不打算这么做。一旦我停止这样做,就不再创建行。谢谢