修改DAL,System.ArgumentException时出错,“已存在具有相同密钥的条目”

好吧,我完全被这个难倒了。 我可能没有足够的信息在这里发布,但我甚至不知道从哪里开始寻找。 我正在尝试在DAL.edmx文件上“从数据库更新模型”。 我将一个字段包含在之前未包含的视图中。 我尝试刷新,然后我尝试重命名数据库中的视图并从DAL中删除视图,以便我可以重新添加它。 我有两次

在此处输入图像描述

接下来,我无缘无故地尝试将我重命名的视图添加到DAL中,得到了相同的exception。 从DAL.tt手动删除没有帮助。 谷歌搜索问题,只有2个不相关的结果。 我不知道哪里开始寻找。

我没有写它,但这里是视图的源sql(如果它有帮助)。 EF不会添加重命名的视图这一事实暗示它可能与SQL有关吗? SQL在mngmnt studio中运行良好。

SELECT ID, IssueID, IssueTypeID, IssueText, IssueCreateDate, WeekendDate, CustomerName, Employee, CONVERT(DECIMAL(6, 2), AdjustedTotalRHours, 101) AS AdjustedTotalRHours, AdjustedTotalOHours, AdjustedTotalRHours + AdjustedTotalOHours AS Hours, InvoiceNumber, AdjustedInvoiceAmount, COALESCE ((SELECT SUM(InvoiceAmount) AS Expr1 FROM TrendingDataFinal AS I1 WHERE (InvoiceNumber = T1.InvoiceNumber) AND (CompanyID = T1.CompanyID) AND (CalType = 'F') AND (Aident = T1.Aident)), 0) AS TotalInvoiceAmount, InvoiceDate, ROUND(DATEDIFF(DAY, InvoiceDate, GETDATE()), 0) AS DaysOutstanding, Notes, Aident, EINC, IsClosed, CompanyID, (SELECT COUNT(ne.EntryID) AS Expr1 FROM Madison.Notes.Note AS n INNER JOIN Madison.Notes.NoteEntry AS ne ON n.NoteID = ne.NoteId WHERE (n.Key1 = T1.InvoiceNumber)) AS HasNotes, COALESCE ((SELECT TOP (1) CompanyName FROM ReportingCompanies AS I1 WHERE (CompanyId = T1.CompanyID)), '') AS CompanyName, BranchName, PayStatus FROM BillMan_ReportStage AS T1 

任何建议,将不胜感激。

更新:使用相同的SQL创建品牌打屁股新视图,然后通过相同的方法将其添加到DAL,同样的错误。

我有完全相同的问题。 正如我注意到的,在将.edmx文件与Subversion合并之后出现了这个问题。 在文本编辑器中查看.edmx文件,我发现了一个重复的EntitySetMapping条目。 手动删除副本后,问题就解决了! 希望这可以帮助

您可能有两个相同的节点:EntitySetMapping。 你应该删除一个,一切都会好的。 尝试删除视图的所有映射并再次添加它们。 如果这不起作用,请尝试查看“模型浏览器”视图中的“模型/实体类型”。 在旧迁移期间可能会遗留一些实体,当您尝试添加具有相同密钥的表时,会发生错误。 希望这可以帮助 ;]

我有完全相同的问题,并在cedenbal的答案中找到了解决方案的线索 – 重复EntitySetMapping条目。 问题是:如何在具有250+表的近3Mb的EDMX中找到它/它们。 解决方案是(a)在EDMX类型的文件上的“EntitySetMapping Name =”上运行Visual Studio中的“Find All”。 这产生了250个条目的列表(如预期的那样),但不是我可以发现重复的任何顺序。 因此(b)将列表剪切并粘贴到Notepad ++中,运行宏来删除箔条,只留下表名,(c)将此列表剪切并粘贴到Excel中,并将其排序为AZ。 然后(d)只是在列表中寻找副本。 找到一个包含8个重复ESM的整个部分! 删除它们,保存EDMX,在Visual Studio中重新加载EDMX,重新运行“从数据库更新”和宾果游戏。

我不知道这是否会有所帮助,因为我不太了解它,但我碰巧看到部分类vw_BillingIssues.cs确实在其中有额外的字段。 我在解决方案范围内搜索术语“vw_BillingIssues”,并将额外字段添加到任何缺少它的列表或集合(几乎在其他任何地方),重建解决方案和成功! 我确实注意到它提到的视图的基础表没有定义主键,但不记得我在哪里看到它。

在我的情况下,以下解决方案帮助:

使用XML Editor打开.edmx文件,尝试查找重复的EntitySetMapping

重复的EntitySetMapping

重复的EntitySetMapping