Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Foreign Keys_Insert Update - Fatal编程技术网

C# 实体框架-使用外键插入

C# 实体框架-使用外键插入,c#,entity-framework,foreign-keys,insert-update,C#,Entity Framework,Foreign Keys,Insert Update,如果有明确的答案,我会道歉。但是我不能插入到一个简单的表中,因为它包含一个外键 任务表 任务ID(主键) 描述 状态ID(FK) 我试图在其中插入如下内容: Task t = new Task(); t.Id = 1234; t.Title = "foo"; t.Status = db.Status.ToList().First(); 但是得到一个updateException错误: 正在从AssociationSet“FK_任务

如果有明确的答案,我会道歉。但是我不能插入到一个简单的表中,因为它包含一个外键

任务表
  • 任务ID(主键)
  • 描述
  • 状态ID(FK)

    我试图在其中插入如下内容:

            Task t = new Task();
            t.Id = 1234;
            t.Title = "foo";
            t.Status = db.Status.ToList().First();
    
    但是得到一个updateException错误: 正在从AssociationSet“FK_任务_状态”中添加或删除关系。对于基数约束,还必须添加或删除相应的“任务”。

    我怎样才能插入到这个表中

    干杯

    找到我的问题

    我的计划错了。当我创建外键时,我把它指向了错误的字段。在SQL profiler中查看,看到以下内容:

    挑选 1作为[C1], [Extent1].[Id]作为[Id], [Extent1][Descr]作为[Descr], [Extent2].[Id]作为[Id1] 从[dbo].[Status]到[Extent1] 左外部联接[dbo].[Task]作为[Extent1].[Id]=[Extent2].[Id]上的[Extent2]

    这应该是哪个(在statusId而不是id上加入):

    挑选 1作为[C1], [Extent1].[Id]作为[Id], [Extent1][Descr]作为[Descr], [Extent2].[Id]作为[Id1] 从[dbo].[Status]到[Extent1] 在[Extent1].[Id]=[Extent2].[StatusId]上将[dbo].[Task]作为[Extent2]左外部联接

    愚蠢的我;)

    使用“Entity Framework 1.0”(到今天为止,该版本是最新版本)您有了正确的想法-从数据库获取状态以设置任务。您确定您实际得到的是一个具有上述语法的状态实体吗

    逐步检查代码,确保任务实体上的引用被设置为实际的物化状态实体。

    您可以尝试

            Task t = new Task();
            t.Id = 1234;
            t.Title = "foo";
            t.Status.EntityKey = new EntityKey("tblStatus","StatusId",t.StatusID);
    

    希望这能在.net framework 4.0中起作用。您可以使用以下简单方法:

     Task t = new Task();
        t.Id = 1234;
        t.Title = "foo";
        t.StatusId = 5678;
    

    参考资料:

    嘿,戴夫。通过代码调试,我得到了一个分配给t.status的有效状态实体。。。。。哦,天哪,刚刚发现我的问题。外键链接到错误的字段。将更新我的问题。谢谢你的回答,这让我看起来更彻底了。