我有一个现有的数据库,我使用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>
答案 0 :(得分:0)
您确定在edmx中为该实体设置了主键吗?如果没有检查数据库,以确保在那里设置正确。
答案 1 :(得分:0)
好吧,我通过删除所有生成的类并从头开始完全生成它来解决这个问题。现在,实体模型包含相应的键,我不需要手动修改模型。