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_任务
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的有效状态实体。。。。。哦,天哪,刚刚发现我的问题。外键链接到错误的字段。将更新我的问题。谢谢你的回答,这让我看起来更彻底了。