none
非常诡异的错误!求助:“不能添加其键已在使用中的实体”错误! RRS feed

  • 问题

  • 我写了一个方法,同时向两张表插入数据,主键和外键都有,单独调用没有问题。对这个方法编写单元测试时,出现了奇怪的问题。

    下面是单元测试中的全部代码:

     OverTimeService target = new OverTimeService(); // TODO: 初始化为适当的值

                string userNo = string.Empty; // TODO: 初始化为适当的值

                OvertimeSheetDto sheetDto = null; // TODO: 初始化为适当的值

                try { target.SaveSheetDraft(userNo, sheetDto); }

                catch (Exception ex) { Assert.AreEqual("加班单对象不能为空", ex.Message); }

                sheetDto = new OvertimeSheetDto() { Id = "45" };

                try { target.SaveSheetDraft(userNo, sheetDto); }

                catch (Exception ex) { Assert.AreEqual("加班员工不能为空", ex.Message); }

                sheetDto.OvertimeWorker = new WorkerDto() { WorkerNum = "20001" };

                //try { target.SaveSheetDraft(userNo, sheetDto); }

                //catch (Exception ex) { Assert.AreEqual("加班单类型不能为空", ex.Message); }

                sheetDto.SheetKind = new OvertimeKindDto() { SheetKind = "献血轮休" };

                //try { target.SaveSheetDraft(userNo, sheetDto); }

                //catch (Exception ex) { Assert.AreEqual("献血日期不能为空", ex.Message); }

                sheetDto.OvertimeDate = DateTime.Now.Date;

                //try { target.SaveSheetDraft(userNo, sheetDto); }

                //catch (Exception ex) { Assert.AreEqual("轮休天数必须为正数", ex.Message); }

                sheetDto.RestDays = 4;

                //try { target.SaveSheetDraft(userNo, sheetDto); }

                //catch (Exception ex) { Assert.AreEqual("没有找到用户信息", ex.Message); }

                userNo = "10001";

                //try { target.SaveSheetDraft(userNo, sheetDto); }

                //catch (Exception ex) { Assert.AreEqual("没有权限", ex.Message); }

                userNo = "10009";

                try { target.SaveSheetDraft(userNo, sheetDto); }

                catch (Exception ex) { Assert.Fail("更新加班单时发生异常"); }

    加粗部分代码是用于在方法中判断所需要的字段是否都已经赋值的,如果没有赋值,就抛出异常,在这个单元测试的方法中,就捕获这些异常,直到最后一个try代码段中,最后成功可以将这个对象存入数据库。

    现在问题来了,如果按照上面的代码运行测试,可以成功插入数据库,可如果不注释那些加粗的代码,就会报:不能添加其键已在使用中的实体 的异常。

    请高手帮忙解释一下,为什么我按照上面的代码可以插入数据库数据,可加入那些被注释的代码后,就报错呢?谢谢了!

    2011年8月30日 11:49

答案

  • 通常是给自增的字段赋值会出现这样的错误,请检查一下你的数据表中的各个字段。跨DataContext的操作会引起这样的问题,如果是更新的时候变成了新增也会出现这个问题。

    请按照这个思路检查下你的代码。

    希望对你有帮助。

    谢谢


    Jackie Sun [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月2日 7:25
    版主