Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggunakan tampilan tanpa kunci utama dengan Entitas

Apakah mungkin untuk menambahkan tampilan ke model Entitas tanpa pengenal unik?

Jika tanpa kunci utama, tidak. Itu akan menghasilkan kesalahan seperti ini:

Satu atau beberapa kesalahan validasi terdeteksi selama pembuatan model:

System.Data.Edm.EdmEntityType::EntityType 'SalesOnEachCountry' tidak memiliki kunci yang ditentukan. Tentukan kunci untuk EntityType.System.Data.Edm.EdmEntitySet ini:EntityType:EntitySetSalesOnEachCountryList ini didasarkan pada tipe SalesOnEachCountry yang memiliki nokey yang ditentukan.

Jika tanpa pengidentifikasi unik, ya, meskipun memiliki keluaran yang tidak diinginkan. Catatan dengan pengidentifikasi yang sama akan mereferensikan objek yang sama, ini disebut Pola Peta Identitas

Contoh, meskipun tampilan Anda menghasilkan dua baris ini:

Country     Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000

Jika Anda hanya akan memetakan kunci utama pada bidang Negara saja, mis.

public class SalesOnEachCountry
{        
    [Key]
    public int CountryId { get; set; }
    public string CountryName { get; set; }        
    public int OrYear { get; set; }
    public long SalesCount { get; set; }
    public decimal TotalSales { get; set; }
}

, bahkan tampilan Anda menghasilkan dua baris di atas pada editor kueri Oracle Anda, Entity Framework menghasilkan keluaran yang salah ini:

Country     Year TotalSales
Philippines 2010 20.000000
Philippines 2010 20.000000

Entity Framework akan menganggap bahwa baris kedua adalah objek yang sama dengan baris pertama.

Untuk menjamin keunikan, Anda harus mengidentifikasi kolom apa yang membuat setiap baris unik. Dalam contoh di atas, Tahun harus disertakan sehingga kunci utama unik. yaitu

public class SalesOnEachCountry
{        
    [Key, Column(Order=0)] public int CountryId { get; set; }
    public string CountryName { get; set; }
    [Key, Column(Order=1)] public int OrYear { get; set; }

    public long SalesCount { get; set; }      
    public decimal TotalSales { get; set; }
}

Membuat kunci utama Anda mirip dengan atribut di atas, Entity Framework dapat dengan benar memetakan setiap baris tampilan Anda ke objeknya sendiri. Oleh karena itu, Entity Framework sekarang dapat menampilkan baris yang sama persis dengan tampilan Anda.

Country     Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000

Detail lengkapnya di sini:http://www.ienablemuch.com/2011/06/mapping-class-to-database-view-with.html

Kemudian mengenai tampilan Anda yang tidak memiliki kolom untuk membuat baris menjadi unik, cara termudah untuk menjamin Entity Framework dapat memetakan setiap baris tampilan Anda ke objek mereka sendiri adalah dengan membuat kolom terpisah untuk kunci utama , kandidat yang baik adalah membuat kolom nomor baris di setiap baris. misalnya

create view RowNumberedView as

select 
    row_number() over(order by <columns of your view sorting>) as RN
    , *
from your_existing_view

Kemudian tetapkan [Key] atribut pada properti RN dari class RowNumberedView Anda



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengembalikan Jumlah Detik Lewat Tengah Malam di Oracle Database

  2. Buku Putih Pengoptimal 12c lainnya

  3. Memiliki Output PL/SQL secara Real Time

  4. C#:Objek tidak dapat dilemparkan dari DbNull ke tipe lain

  5. CLEAR SCREEN - Pintasan Pengembang Oracle SQL?