在Entity Framework中定义复合主键

时间:2012-03-09 11:37:15

标签: c# .net oracle entity-framework

我有一个没有定义主键的表。将此添加到我的DataModel时,该工具会生成以下消息:

  

生成过程中发现的错误:
  警告6013:表/视图   'CHARGE_DETAILS'没有定义主键   并且无法推断出有效的主键。此表/视图已经过   排除。要使用该实体,您需要检查您的架构,添加   正确的密钥,并取消注释。

我不能以任何方式修改表 - 但是我认为我可以从两列构造一个复合键以满足这些要求。

EntityType元素Key中的it appears只能包含零或一个元素。

那么我如何指示EF将两列作为键处理?

2 个答案:

答案 0 :(得分:1)

您可以在数据库端创建复合主键。你使用ODP.Net吗?它会自动映射您的数据库pk。

答案 1 :(得分:1)

今天我遇到了同样的问题,我做了一个快速而肮脏的工作。我只是在给定实体的 .edmx 文件中注释掉了定义查询。

"原":

<EntitySet Name="CODES" EntityType="Self.CODES" store:Type="Tables" store:Schema="PIZZA">
  <DefiningQuery>
   SELECT 
    "CODES"."LINE" AS "LINE", 
    "CODES"."TEXT" AS "TEXT", 
    "CODES"."MODULE" AS "MODULE", 
    "CODES"."DEFAULT" AS "DEFAULT"
  </DefiningQuery>
</EntitySet>

修改后:

<EntitySet Name="CODES" EntityType="Self.CODES" store:Type="Tables" store:Schema="PIZZA">
  <!--<DefiningQuery>
   SELECT 
    "CODES"."LINE" AS "LINE", 
    "CODES"."TEXT" AS "TEXT",
    "CODES"."MODULE" AS "MODULE", 
    "CODES"."DEFAULT" AS "DEFAULT"
  </DefiningQuery>-->
</EntitySet>

在我的情况下,这有效,但我认为它并不适用于所有情况。我使用LINEMODULE作为复合键。我没有对这张桌子做任何想象,只是原始插页,所以它有效。