Bagaimana saya bisa menggunakan tampilan database dalam kode kerangka entitas terlebih dahulu,
Bagaimana saya bisa menggunakan tampilan database dalam kode kerangka entitas terlebih dahulu,
Jawaban:
Jika, seperti saya, Anda hanya tertarik dalam memetakan entitas yang berasal dari database lain (dalam kasus saya erp) untuk menghubungkannya dengan entitas khusus aplikasi Anda, maka Anda dapat menggunakan tampilan saat menggunakan tabel (memetakan tampilan di cara yang sama!). Jelas, jika Anda mencoba memperbarui entitas itu, Anda akan mendapatkan pengecualian jika tampilan tidak dapat diperbarui. Prosedurnya sama seperti dalam kasus entitas normal (berdasarkan tabel):
Gunakan file FooViewConfiguration untuk menyetel nama yang berbeda untuk tampilan (menggunakan ToTable ("Foo"); di konstruktor) atau untuk menyetel properti tertentu
public class FooViewConfiguration : EntityTypeConfiguration<FooView>
{
public FooViewConfiguration()
{
this.HasKey(t => t.Id);
this.ToTable("myView");
}
}
Tambahkan file FooViewConfiguration ke modelBuilder, misalnya ovveriding metode OnModelCreating dari Konteks:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new FooViewConfiguration ());
}
[Table("myView")]
ini bisa dibilang lebih sederhana daripada menggunakan membuat file EntityTypeConfiguration
.
Ini mungkin pembaruan tetapi untuk menggunakan tampilan dengan Kode EF pertama cukup tambahkan [Tabel ("NameOfView")] ke bagian atas kelas dan semua harus bekerja dengan benar tanpa harus melalui semua rintangan yang orang lain lalui. Anda juga harus melaporkan salah satu kolom sebagai kolom [key]. Berikut adalah contoh kode saya di bawah ini untuk menerapkannya.
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SomeProject.Data
{
[Table("SomeView")]
public class SomeView
{
[Key]
public int NameID { get; set; }
public string Name { get; set; }
}
}
Dan seperti inilah konteksnya
using System.Data.Entity;
namespace SomeProject.Data
{
public class DatabaseContext : DbContext
{
public DbSet<SomeView> SomeViews { get; set; }
}
}
Jika yang Anda inginkan hanyalah sekumpulan objek yang tidak dinormalisasi, Anda mungkin saja membuat IQueryable<TDenormolized>
properti hanya-get publik di DbContext
kelas Anda .
Dalam get
Anda mengembalikan hasil Linq untuk memproyeksikan nilai de-normoalisasi ke dalam objek yang dinormalisasi. Ini mungkin lebih baik daripada menulis Tampilan DB karena Anda memprogram, Anda tidak dibatasi hanya dengan menggunakan select
pernyataan. Juga kompilasi tipe waktu aman.
Berhati-hatilah agar tidak memicu enumerasi seperti ToList()
panggilan, yang akan merusak kueri yang ditangguhkan dan Anda mungkin akan mendapatkan satu juta catatan kembali dari database dan memfilternya di server aplikasi Anda.
Saya tidak tahu apakah ini cara yang benar, tetapi saya mencoba dan berhasil untuk saya.
Saya tahu ini adalah pertanyaan lama dan ada banyak jawaban di sini, tetapi saya memaksakan masalah ketika saya menggunakan jawaban ini dan kesalahan terjadi ketika saya menggunakan perintah update-database di Package Manager Console:
Sudah ada objek bernama '...' di database.
dan saya menggunakan langkah-langkah ini untuk mengatasi masalah ini:
semoga membantu.
migrationBuilder.Sql("CREATE OR REPLACE VIEW ...
); Sehingga rekan kerja juga bisa menggunakannya untuk mengupgrade database mereka.