2012-08-17 3 views
3

나는 오라클 V에 대한 DevArt dotConnect를 사용하여 직접 모드에서 오라클 익스프레스의 기본 HR 모델에 액세스하는 간단한 테스트 프로그램을 작성 6.8.0.350 :.StoreGeneratedPattern이 DevArt Entity Framework와 작동하지 않습니까?

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 테이블에 추가하십시오. (그것이 XML에 기록되는 경우 예, 확인) Identity

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을 설정했다 : 여기 트리거를 추가했습니다.

테스트 응용 프로그램을 실행하면 레코드가 만들어지고 올바른 새로운 LocationID을 얻었습니다. 그러나 EF에서는 새로운 신분증이 도착하지 않습니다.

왜 생성 된 ID를 인식하지 못합니까? 그렇다면, 그 평균 무엇을 : DevArt Blog

편집 : 나는 이제 다른 시나리오에서 테스트 :

  1. devArt EntityModel 직접 모드에서 OracleClient와 OracleClient
  2. ADO.NET EntityModel와
  3. devArt EntityModel을

결과는 같습니다. SaveChanged에 No DSID이 리턴됩니다. 또 다른 결과로, 경우에 나는 기업이 주요으로 지금이 있다는 것을, InvalidOperationException이 말을 올릴 것이다

ctx.Refresh(RefreshMode.ClientWins, log); 

쓰기 '0'올바른하지만 도움이 :-(이다.

답변

3

.edmx 파일 개념 스키마와 스토리지 스키마가 정의되어 있음을 알 수 있습니다. 디자이너에서 StoreGeneratedPattern을 변경하면 개념 스키마에서만 변경되지만 저장소 스키마에서는 변경되지 않습니다. 이는 실제로 필요합니다.

모델에서 데이터베이스를 생성하면 StoreGeneratedPattern이 모델 우선 개발을 위해 디자이너에 저장됩니다. 그렇지 않으면 효과가 없습니다. 따라서 저장소 스키마에 특성을 수동으로 삽입해야합니다.

+0

죄송합니다, 귀하의 답변을 너무 늦게 보았습니다. 감사. – sprinter252

+0

이 문제가 해결되었습니다. 새로운 버전에서는 제가 생각합니다. .edml을 가지고 있고 EntityFramework 6 – hanzolo

0

을 내가했다 몇 가지 검사 후 내 edml의 XML을 다시 한 번 보았습니다. StoreGeneratedPattern이 XML에 도착하지 않았다는 것을 알았습니다. 처음에 내가 작성한 글에서 XML을 확인했기 때문에 무슨 일이 일어 났는지 모르겠습니다. , 속성은 거기에있었습니다. 그러나 솔루션에 관심이있는 분들을 위해 여기를보십시오 : Solution in other thread

+1

직접 답을 찾았습니다. 나는 최근에 같은 문제에 부딪혔다. 그래서 나는 이것이 거의이 문제라고 확신했다. – aKzenT