实体框架 - 使用外键插入

时间:2010-04-12 16:17:22

标签: c# entity-framework foreign-keys insert-update

道歉,如果某处有明确的答案。但由于它包含一个外键,我无法插入到一个简单的表中。

任务表

  • TaskId(PK)
  • 描述
  • StatusId(FK)

    我试着像这样插入:

            Task t = new Task();
            t.Id = 1234;
            t.Title = "foo";
            t.Status = db.Status.ToList().First();
    

    但是得到updateException错误: 正在从AssociationSet'FK_Task_Status'添加或删除关系。对于基数约束,还必须添加或删除相应的“任务”。

    如何插入此表?

    干杯

    ...

    找到我的问题......

    我的架构错了。当我创建我的外键时,我将它指向错误的字段。看看SQL分析器,看到了这个:

      

    选择   1 AS [C1],   [Extent1]。[Id] AS [Id],   [Extent1]。[Descr] AS [Descr],   [Extent2]。[Id] AS [Id1]   FROM [dbo]。[Status] AS [Extent1]   LEFT OUTER JOIN [dbo]。[任务] AS [Extent2] ON [Extent1]。[Id] = [Extent2]。[Id]

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

      

    选择   1 AS [C1],   [Extent1]。[Id] AS [Id],   [Extent1]。[Descr] AS [Descr],   [Extent2]。[Id] AS [Id1]   FROM [dbo]。[Status] AS [Extent1]   LEFT OUTER JOIN [dbo]。[任务] AS [Extent2] ON [Extent1]。[Id] = [Extent2]。[StatusId]

    傻傻的我;)

  • 3 个答案:

    答案 0 :(得分:2)

    <。>在.net framework 4.0中,您可以使用这种简单的方法:

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

    参考:http://blogs.msdn.com/b/adonet/archive/2009/11/06/foreign-key-relationships-in-the-entity-framework.aspx

    答案 1 :(得分:0)

    使用“Entity Framework 1.0”(直到今天,最新的版本)你有正确的想法 - 从数据库获取状态以在任务上设置。你确定你实际上正在使用上面使用的语法获得Status实体吗?

    逐步执行代码以确保将Task实体上的引用设置为实际的物化状态实体。

    答案 2 :(得分:0)

    你可以尝试

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

    希望这会有用