Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架一对零或始终创建一个可选表行_C#_Entity Framework - Fatal编程技术网

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
的默认实例。我希望我可以将此标记为答案。你是对的。我因为树木而错过了森林……或者类似的东西。正如您所指出的,我实际上是在实例化东西,尽管我并不打算这么做。一旦我停止这样做,就不再创建行。谢谢