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
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