Как избежать добавления аннотации [Key] к сущностям при использовании подхода «сначала DB» - PullRequest
0 голосов
/ 04 мая 2011

У меня есть существующая БД, и я использую подход «Сначала БД» с Entity Framework 4.1. К сожалению, БД использует некоторые устаревшие соглашения об именах, так что столбцы с первичными ключами часто используют различные имена, такие как «occID». Позже во время проверки EntityFramework выдает исключение при проверке модели объекта, говоря, что

System.Data.Edm.EdmEntityType:: EntityType 'Occupancy' ключ не определен. Определите ключ для этого EntityType.

У этой сущности есть уникальный ключ (и он также помечен как EntityKey в модели Edmx), но валидатор модели продолжает жаловаться. Единственное решение, которое я нашел, - это подписать свойство в сгенерированном классе DbContext аннотацией данных [Key], чтобы EF знал, какое свойство является ключом.

Есть ли другие способы сделать это? Я предполагаю, что EF проверяет некоторые соглашения о кодировании, чтобы определить, какое свойство является ключом. Поскольку это не подход, основанный на коде, я не могу изменять сгенерированный код вручную, так как изменения теряются каждый раз, когда я что-то изменяю в модели.

Это соответствующая часть файла 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 голосов
/ 31 мая 2011

Ну, я решил эту проблему, удалив все сгенерированные классы и сгенерировав их полностью с самого начала.Теперь Entity Model содержит соответствующие ключи, и мне не нужно изменять модель вручную.

0 голосов
/ 04 мая 2011

Вы уверены, что в edmx установлен первичный ключ для этого объекта?Если нет, проверьте базу данных, чтобы убедиться, что она там установлена ​​правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...