StoreGeneratedPattern не работает с DevArt Entity Framework?

Я написал простую тестовую программу, которая будет получать доступ к модели HR по умолчанию на Oracle Express в прямом режиме, используя DevArt dotConnect для Oracle v. 6.8.0.350:

using (var ctx = new HREntities())
{
    var locNew = new LOCATION();
    locNew.CITY = "Magdeburg";
    ctx.LOCATIONs.AddObject(locNew);
    ctx.SaveChanges();
    // will output 0; in database ID is generated
    Console.WriteLine(locNew.LOCATIONID);
}

Как видите, я делаю вставку в таблицу LOCATION. Здесь я добавил триггер:

create or replace
trigger TRG_LOCATION_INS  
   before insert on "HR"."LOCATIONS" 
   for each row 
begin  
   if inserting then 
      select LOCATIONS_SEQ.nextval into :NEW."LOCATION_ID" from dual;       
   end if; 
end;

Последним шагом была установка StoreGeneratedPattern в моей модели на Identity (да, я проверил, записано ли это в XML).

Если я запускаю тестовое приложение, создается запись, и она получает действительный новый LocationID. Но в EF новый ID не поступит.

Почему он не распознает сгенерированный идентификатор? Если да, что это значит: Блог DevArt

РЕДАКТИРОВАТЬ: сейчас я тестировал его в разных сценариях:

  1. devArt EntityModel в прямом режиме
  2. devArt EntityModel с OracleClient
  3. EntityModel ADO.NET с OracleClient

Результат тот же. DSID не возвращается в SaveChanged. В качестве другого результата, если я напишу

ctx.Refresh(RefreshMode.ClientWins, log);

InvalidOperationException вызовет сообщение о том, что теперь есть объект с ключом «0», который является правильным, но бесполезным :-(.


person Alexander Schmidt    schedule 17.08.2012    source источник


Ответы (2)


Если вы посмотрите в файл .edmx, вы увидите, что там определены концептуальная схема и схема хранения. Если вы измените StoreGeneratedPattern в дизайнере, он изменит его только в концептуальной схеме, но не в схеме хранилища, что действительно необходимо.

StoreGeneratedPattern находится в конструкторе для разработки по модели, если вы создаете базу данных из модели, иначе она не будет иметь эффекта. Поэтому вам нужно вручную вставить атрибут в схему хранилища.

person aKzenT    schedule 19.08.2012
comment
Извините, поздно увидел ваш ответ. Спасибо. - person Alexander Schmidt; 19.08.2012
comment
Это было исправлено. В более новых версиях я верю ... у меня есть .edml, хотя и EntityFramework 6 - person hanzolo; 07.02.2014

После нескольких тестов я снова взглянул на XML моего edml и увидел, что StoreGeneratedPattern не пришел к XML. Я не знаю, что произошло, потому что в своем первоначальном посте я написал, что проверил XML. В первый раз, когда я сделал это, Атрибут был там. Однако только для тех из вас, кто заинтересован в решении, посмотрите здесь: Решение в другой ветке

person Alexander Schmidt    schedule 19.08.2012
comment
Вижу, ты сам нашел ответ. Недавно я столкнулся с той же проблемой, поэтому я был почти уверен, что это проблема. - person aKzenT; 19.08.2012