Pertanyaan Kerangka Entitas menempatkan semua bidang dalam kunci utama untuk tabel Firebird


Saya menggunakan database Firebird 2.1 bersama dengan VS2010 (.NET 4.0) dan saya mencoba membuatnya bekerja dengan baik dengan kerangka entitas.

Masalahnya adalah, bahwa ketika saya menghasilkan entitas dari tabel database, kerangka kerja mendeteksi semua kolom untuk menjadi bagian dari kunci primer. Tabel ini sangat sederhana dengan dua kolom bilangan bulat, salah satunya ditetapkan sebagai kunci utama.

Saya bahkan memiliki "# PK_GEN #" ditetapkan sebagai komentar dari kolom primary key.

Di EF-Editor saya tidak dapat mengubah properti primary key dari objek penyimpanan, dan karena saya harus berurusan dengan kolom nullable, itu adalah masalah. Saya dapat mengedit kode XML dari file model, tetapi perubahan tidak persisten saat memperbarui model, jadi itu adalah show-stopper.

Karena saya hanya membaca tentang masalah yang sama tentang pandangan bukan tabel, saya jelas melakukan sesuatu yang salah, tetapi saya tidak bisa mengetahuinya.

edit: By the way, saya hanya menguji perilaku dengan VS 2012 dan tetap tidak berubah.

Inilah skrip CREATE. Karena saya baru mengenal Firebird, mungkin saya juga ada yang salah di sini, tapi saya kira itu tidak benar.

CREATE GENERATOR GEN_TESTTABLE_ID;
CREATE TABLE TESTTABLE (
    TESTTABLE_ID  INTEGER NOT NULL,
    VALUE         INTEGER
);
ALTER TABLE TESTTABLE ADD CONSTRAINT PK_TESTTABLE PRIMARY KEY (TESTTABLE_ID);
COMMENT ON COLUMN TESTTABLE.TESTTABLE_ID IS '#PK_GEN#';

SET TERM ^ ;
CREATE OR ALTER TRIGGER TESTTABLE_BI_GEN_ID FOR TESTTABLE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if ((new.testtable_id is null) or (new.testtable_id = 0) ) then
    begin
      new.testtable_id = gen_id(gen_testtable_id, 1);
    end
end
^
SET TERM ; ^

4
2018-02-28 16:55


asal


Jawaban:


Masalahnya adalah, bahwa Firebird 2.1 berisi bug, yang menghasilkan ini. Hasilkan model menggunakan Firebird 2.5 dan Anda akan baik-baik saja.

Beberapa referensi sini, sini, sini.


2
2018-03-03 07:17