使用DB-first方法时,如何避免向实体添加[Key] Annotation

时间:2011-05-04 14:43:59

标签: entity-framework-4.1

我有一个现有的数据库,我使用Entity Framework 4.1的方法“DB First”。不幸的是,数据库正在使用一些传统的命名约定,因此具有主键的列通常使用各种名称,例如“occID”。稍后在验证期间,EntityFramework在验证实体模型时会抛出异常

  

System.Data.Edm.EdmEntityType :: EntityType'Occupancy'没有定义键。定义此EntityType的密钥。

此实体具有唯一键(并且在Edmx模型中也标记为EntityKey),但模型验证器仍在抱怨。我找到的唯一解决方案是使用数据注释[Key]在生成的DbContext类中对属性进行签名,以便EF知道哪个属性是键。

还有其他方法吗?我想EF正在检查一些编码约定以识别哪个属性是Key。由于这不是代码优先方法,因此我不允许手动更改生成的代码,因为每次我在模型中更改内容时更改都会丢失。

这是EDMX文件的相应部分:

 <EntityType Name="occupancy">
           <Key>
             <PropertyRef Name="occID" />
           </Key>
           <Property Name="occID" Type="int" Nullable="false"
 StoreGeneratedPattern="Identity" />
           <Property Name="occPDM" Type="int" />
           <Property Name="occDatePDM" Type="datetime" />
           <Property Name="occDatePC" Type="datetime" />
           <Property Name="occOccupancy" Type="int" />
           <Property Name="occSityControlID" Type="bigint"
 />
           <Property Name="occSityControlLine" Type="int"
 />
           <Property Name="occPDM_Id" Type="bigint" />
           <Property Name="occServiceCar" Type="int" />
           <Property Name="occMoneyCar" Type="int" />
           <Property Name="occPdmParentId" Type="int" />
         </EntityType>

2 个答案:

答案 0 :(得分:0)

您确定在edmx中为该实体设置了主键吗?如果没有检查数据库,以确保在那里设置正确。

答案 1 :(得分:0)

好吧,我通过删除所有生成的类并从头开始完全生成它来解决这个问题。现在,实体模型包含相应的键,我不需要手动修改模型。