Saya masuk ke Kerangka Entitas, tapi saya tidak yakin apakah saya kehilangan titik kritis dalam pendekatan kode-pertama.
Saya menggunakan pola repositori generik berdasarkan kode dari https://genericunitofworkandrepositories.codeplex.com/ dan telah membuat entitas saya.
Tetapi ketika saya mencoba mengakses atau memodifikasi entitas saya mengalami hal-hal berikut:
System.InvalidOperationException: Jenis entitas Estate bukan bagian dari model untuk konteks saat ini.
Itu terjadi ketika saya mencoba mengaksesnya dari repositori saya:
public virtual void Insert(TEntity entity)
{
((IObjectState)entity).ObjectState = ObjectState.Added;
_dbSet.Attach(entity); // <-- The error occurs here
_context.SyncObjectState(entity);
}
Basis data (./SQLEXPRESS) dibuat dengan baik, tetapi entitas (tabel) tidak dibuat saat startup.
Saya bertanya-tanya apakah saya perlu mengatur pemetaan entitas secara eksplisit? Apakah EF tidak dapat melakukan ini sendiri?
Entitas saya adalah:
public class Estate : EntityBase
{
public int EstateId { get; set; }
public string Name { get; set; }
}
Konteks saya adalah seperti itu:
public partial class DimensionWebDbContext : DbContextBase // DbContextBase inherits DbContext
{
public DimensionWebDbContext() :
base("DimensionWebContext")
{
Database.SetInitializer<DimensionWebDbContext>(new CreateDatabaseIfNotExists<DimensionWebDbContext>());
Configuration.ProxyCreationEnabled = false;
}
public new IDbSet<T> Set<T>() where T : class
{
return base.Set<T>();
}
}
Apakah ada alasan khusus mengapa kesalahan ini terjadi? Saya telah mencoba mengaktifkan migrasi dan mengaktifkan migrasi otomatis tanpa bantuan apa pun.
sumber
OnModelCreating
jika entitas Anda berada di majelis yang sama dengan AndaDbContext
. Saya belum pernah menggunakan anotasi data untuk entitas, jadi saya tidak bisa mengatakan dengan pasti. Anda selalu dapat memindai rakitan di AndaOnModelCreating
untuk menemukan entitas di rakitan lain dan mendaftarkannya secara otomatis (seperti yang dilakukan Tripod).Rupanya, kesalahan ini sangat umum, bisa jadi ada beberapa alasan. Dalam kasus saya, itu adalah sebagai berikut: String koneksi (di Web.config) yang dihasilkan oleh
.edmx
tidak valid. Setelah hampir satu hari mencoba semuanya, saya mengubah string koneksi dari string EF ke string ADO.NET. Ini menyelesaikan masalah saya.Misalnya, string EF terlihat seperti ini:
Dan string ADO.NET terlihat seperti ini:
Sumber: http://msdn.microsoft.com/nl-nl/data/jj556606.aspx
sumber
EF 4.x
keEF 6
. Saya harus membuat ulang string koneksi untuk menambahkan tabel (DatabaseFirst
). Saya tidak melihat bahwa koneksi saya diapp.config
danweb.config
berbeda. Setelah saya mengambil alihconnectionstring
dariapp.config
, mulai bekerja.Bagi saya masalahnya adalah bahwa saya belum memasukkan Kelas Entitas ke dalam db saya yang diatur dalam konteks kerangka entitas.
sumber
Anda dapat mencoba menghapus tabel dari model dan menambahkannya lagi. Anda dapat melakukan ini secara visual dengan membuka file .edmx dari Solution Explorer.
Langkah:
sumber
Masalahnya mungkin pada string koneksi. Pastikan string koneksi Anda untuk penyedia SqlClient, tanpa hal-hal metadata yang terkait dengan EntityFramework.
sumber
Saya telah melihat kesalahan ini ketika tabel yang ada di database tidak secara tepat memetakan ke model kode pertama. Secara khusus saya punya char (1) di tabel database dan char di C #. Mengubah model ke string menyelesaikan masalah.
sumber
Masalah saya diatasi dengan memperbarui bagian metadata dari string koneksi. Rupanya itu menunjuk pada referensi .csdl / .ssdl / .msl yang salah.
sumber
Satu hal lagi yang perlu diperiksa dengan string koneksi Anda - nama model. Saya menggunakan dua model entitas, DB pertama. Dalam konfigurasi saya menyalin koneksi entitas untuk satu, menamainya, dan mengubah bagian string koneksi. Apa yang tidak saya ubah adalah nama model, jadi ketika model entitas dihasilkan dengan benar, ketika konteksnya dimulai, EF mencari model yang salah untuk entitas tersebut.
Tampak jelas ditulis, tetapi ada empat jam saya tidak akan kembali.
sumber
Bagi saya masalahnya adalah bahwa saya menggunakan yang
connection string
dihasilkan olehADO.Net
Model (.edmx). Mengubah string koneksi menyelesaikan masalah saya.sumber
Ini juga dapat terjadi jika Anda menggunakan cache model yang ada yang ketinggalan zaman karena satu dan lain alasan. Jika konteks Anda telah di-cache ke file EDMX pada sistem file (melalui DbConfiguration.SetModelStore) maka OnModelCreating tidak akan pernah dipanggil karena versi cache akan digunakan. Akibatnya jika suatu entitas hilang dari toko cache Anda maka Anda akan mendapatkan kesalahan di atas meskipun string koneksi sudah benar, tabel ada di database dan entitas diatur dengan benar di DbContext Anda.
sumber
Pesannya cukup jelas tapi saya tidak mengerti pada awalnya ...
Saya bekerja dengan dua konteks DB Entity Framework
sysContext
danshardContext
dalam metode yang sama.Entitas yang telah saya modifikasi \ update berasal dari satu konteks, tetapi kemudian saya mencoba menyimpannya ke konteks lain seperti ini:
tetapi versi yang benar adalah ini:
Setelah melewati entitas ke konteks yang benar kesalahan ini hilang.
sumber
Kedengarannya jelas, tetapi pastikan Anda tidak mengabaikan jenisnya secara eksplisit:
modelBuilder.Ignore<MyType>();
sumber
peta entitas (bahkan yang kosong) yang ditambahkan ke konfigurasi akan menyebabkan jenis entitas menjadi bagian dari konteks. Kami memiliki entitas yang tidak memiliki hubungan dengan entitas lain yang diperbaiki dengan peta kosong.
sumber
jika Anda mencoba DB terlebih dahulu maka pastikan bahwa tabel Anda memiliki kunci utama
sumber
Visual Studio 2019 sepertinya menyebabkan ini untuk saya. Saya memperbaikinya dengan menghasilkan model edmx lagi pada tahun 2017.
sumber
Saya mendapatkan masalah yang sama di Entity Framewrok dan saya menyelesaikannya dengan langkah-langkah:
1-Buka Model.edmx Anda 2-ubah tempat tabel (untuk mengubah file cs) 3-simpan
Saya harap membantu Anda
sumber
Hapus file .edmx dan tambahkan lagi. Terutama, jika Anda telah meningkatkan Kerangka Kerja Entity.
sumber
Saya menghadapi masalah yang sama dengan EntityFrameworkCore mencoba memperbarui berbagai nilai.
Pendekatan ini tidak berhasil
Setelah menambahkan metode UpdateRange dan menghapus melampirkan dan memasukkan semuanya berfungsi
sumber
Bagi saya itu disebabkan karena saya mengganti nama kelas entitas. Ketika saya mengembalikannya, itu ok.
sumber
Bisa jadi bodoh, tetapi jika Anda hanya mendapatkan kesalahan ini pada beberapa Tabel, jangan lupa untuk membersihkan proyek Anda dan membangun kembali (bisa menghemat banyak waktu)
sumber
Saya punya ini
Ini dalam metode async, tapi saya lupa menunggu sebelum GetEntryAsync, dan jadi saya mendapatkan kesalahan yang sama ini ...
sumber