4

如果某处对此有明确的答案,我们深表歉意。但我不能插入到一个简单的表中,因为它包含一个外键。

任务表

  • 任务 ID (PK)
  • 描述
  • 状态 ID (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] 左外连接 [dbo].[Task] 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] 左外连接 [dbo].[Task] AS [Extent2] ON [Extent1].[Id] = [Extent2].[StatusId]

    愚蠢的我;)

  • 4

    3 回答 3

    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

    于 2010-08-18T14:55:36.883 回答
    0

    使用“Entity Framework 1.0”(直到今天,最新的版本)你有正确的想法——从数据库中获取状态来设置任务。你确定你真的得到了一个具有上面使用的语法的状态实体吗?

    单步执行您的代码以确保将 Task 实体上的引用设置为实际的具体化 Status 实体。

    于 2010-04-12T16:22:06.913 回答
    0

    你可以试试

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

    希望这会奏效

    于 2010-04-12T16:55:48.913 回答