2012-11-09 12 views
5

Ben bir Oracle 10g veritabanı ile EF 4 (veritabanı ilk, tam olarak oluşturulan model) kullanarak kullanıyorum ve bir alanda bir sorunum var.Int32'yi Oracle numarası (5) ile EF4'e dönüştürün.

Benim alan veritabanımda NUMBER(5) olarak tanımlandı. Modelimde EF, bunu short olarak tanımladı. Benim sorunum, 32767'den büyük (azami bir kısa) 'dan daha büyük değerlere sahip olduğum bu iletiyi buldum: Entity Framework generates short instead of int. Talimatı takip ediyorum ve işe yarıyor, modelim şimdi Int32 değerlerini içeriyor.

Error 2019: Member Mapping specified is not valid. The type 'Edm.Int32[Nullable=True,DefaultValue=]' of member 'XX' in type 'Model.XXX' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=5,Scale=0]' of member 'XX' in type 'Model.Store.XXX'. 

Bu hata her zaman Visual Studio Hata Listesi sekmesinde gösterilecek olan:

Ama yeni bir sorun var. Ancak, başarı oluşturmak ve yarım çalışır: 99999 (edit bakınız)

mi -31073 dönüştü:

  • veritabanında bir değer
  • çalışmayan bir değer yazmaya çalışıyor okumak Her iki yolda da çalışması için bir çözüm var mı?

    BTW, Oracle INTEGER alanları için int32 kullanılmasını öğeye bildirmenin bir yolu var mı? Varsayılan olarak ondalık kullanır. Benim değeri -31073 neden

    DÜZENLEME

    adım adım debuging, ben buldum. Bu hattı unuttum: My iki değer int idi

    dao.Value = (short)dto.Value; 
    

    ama kısaca örtük dönüştürme kökenli idi.

+0

Number için 'decimal' işlevini kullanır çünkü Number, _12.433242_ tamsayı bu değeri tutabilir. Neyse, sorunuzla ilgili olarak, resmi bir cevap için Oracle ile iletişime geçmeyi denediniz mi? – gdoron

+0

Oracle 11g için Oracle Data Provider kullandınız mı? EF 4'ü Oracle 11g için ODP ile kullanıyorum ve Oracle INTEGER ile sorunum yok. –

cevap

6

Hatayı nasıl çıkaracağımı buldum.

<Property Name="SIT_INSEE" Type="number" Precision="5" /> 

Ben Precision="5" kaldırıldı ve uyarı kayboldu:

ben SSDL bölümünde benim alanı bulduk, xml modunda edmx dosyayı düzenleyen.

1

Başkalarının benzer sorunları olması durumunda sadece iki sent'imi eklemek için. Aşağıdakileri web.config dosyasında eşlemelere eklerseniz ve sonra edmx modelini sıfırdan yeniden oluşturursanız (silip veritabanından yeniden oluşturursanız), bu sorunların bazılarını giderirseniz farkettim. Sadece web.config'e değerler eklendiğinde hiçbir şey çözülmedi (muhtemelen sahnelerin arkasındaki kodların bir kısmını yeniden oluşturmak benim tahminim olurdu).

<oracle.dataaccess.client> 
    <settings> 
     <add name="int32" value="edmmapping number(9,0)" /> 
    </settings> 
    </oracle.dataaccess.client>