【问题标题】:Web API Entity Framework error - Item with idenity already exists in the metadata collectionWeb API 实体框架错误 - 元数据集合中已存在具有标识的项目
【发布时间】:2014-06-09 17:13:17
【问题描述】:

我正在 Visual Studio 2012 中试验一个 Web API 2 项目。我首先使用现有 DB 选项中的代码和 EF6 来选择一个表和一个视图。然后,我尝试使用 Web API 2 OData 的配置文件为简单表创建一个控制器。控制器的脚手架无法告诉我“元数据集合中已经存在身份为'Client Last Reveiwed On'的项目”。问题不仅在于我确定该字段对于该项目是唯一的,而且该字段是视图的一部分,而不是表的一部分。下面是为我试图为其创建控制器的简单表 (t_Client) 生成的模型。如您所见,违规列不是课程的一部分。我将在视图类中 VS/EF 不喜欢的列的定义下方添加。

任何想法为什么这不起作用?

Partial Public Class t_Client
<Key>
<DatabaseGenerated(DatabaseGeneratedOption.None)>
Public Property ClientID As Integer

<Required>
<StringLength(255)>
Public Property ClientName As String

Public Property isActive As Boolean

结束类

这是在单独视图中定义的列。

<Column("Client Last Reviewed On", TypeName:="date")>
Public Property Client_Last_Reviewed_On As Date?

【问题讨论】:

    标签: entity-framework ef-code-first entity-framework-6 asp.net-web-api2 asp.net-mvc-scaffolding


    【解决方案1】:

    我不确定这些步骤中的哪一个解决了问题,但这里有一些关于该主题的说明。

    1. 删除基于 SQL 视图的模型引用消除了错误。
    2. 我进入 SQL 并更新了视图以包含行号列。
    3. 即使是行号列,EF 也将多个列标记为键。
    4. 我手动编辑了模型以将行号列作为键。
    5. 我还必须更新 SQL 视图中几列的数据类型以匹配实际情况,主要是 bigint,实际上只是整数。

    我的猜测是修复是定义明确的键。

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      相关资源
      最近更新 更多