public class Foo
{
public string FooId{get;set;}
public Boo Boo{get;set;}
}
public class Boo
{
public string BooId{get;set;}
public Foo Foo{get;set;}
}
Saya mencoba melakukan ini di Entity Framework ketika saya mendapatkan kesalahan:
Tidak dapat menentukan akhir utama dari hubungan antara tipe 'ConsoleApplication5.Boo' dan 'ConsoleApplication5.Foo'. Akhir utama dari asosiasi ini harus dikonfigurasikan secara eksplisit menggunakan API yang lancar hubungan atau anotasi data.
Saya telah melihat pertanyaan tentang StackOverflow dengan solusi untuk kesalahan ini, tetapi saya ingin memahami apa arti istilah "akhir pokok".
c#
entity-framework
database-design
foreign-key-relationship
taher chhabrawala
sumber
sumber
Jawaban:
Dalam hubungan satu-ke-satu, satu ujung haruslah pokok dan ujung kedua harus tergantung. Ujung kepala adalah ujung yang akan dimasukkan lebih dulu dan yang bisa ada tanpa ujung yang tergantung. Dependent end adalah yang harus dimasukkan setelah kepala sekolah karena memiliki kunci asing ke kepala sekolah.
Dalam hal kerangka entitas, FK dalam tanggungan juga harus merupakan PK-nya sehingga dalam kasus Anda, Anda harus menggunakan:
Atau pemetaan yang lancar
sumber
Foo
adalah kepala sekolah?Boo
tergantung, memerlukanFoo
, dan mendapatkan kunci asing.Foo
adalah kepala sekolah dan dapat ada tanpa aBoo
.Anda juga dapat menggunakan
[Required]
atribut anotasi data untuk menyelesaikan ini:Foo
diperlukan untukBoo
.sumber
Boo
yang baru saja diambil dari database, kecuali jika Anda pertama kali memicu lazy-loadFoo
properti. entitasframework.codeplex.com/SourceControl/network/forks/…Boo Boo
virtual?Ini mengacu pada jawaban @Ladislav Mrnka tentang penggunaan api yang lancar untuk mengkonfigurasi hubungan satu-ke-satu.
Punya situasi di mana memiliki
FK of dependent must be it's PK
tidak layak.Misalnya,
Foo
sudah memiliki hubungan satu-ke-banyak denganBar
.Sekarang, kami harus menambahkan hubungan satu-ke-satu lainnya antara Foo dan Bar.
Berikut ini cara menentukan hubungan satu-ke-satu menggunakan api fasih:
Perhatikan bahwa saat menambahkan
PrimaryBarId
perlu dihapus, karena kami menetapkannya melalui api yang lancar.Perhatikan juga bahwa nama metode
[WithOptionalPrincipal()][1]
agak ironis. Dalam hal ini, Kepala Sekolah adalah Bar. Deskripsi WithOptionalDependent () pada msdn membuatnya lebih jelas.sumber
PrimaryBarId
properti? Ini konyol bagi saya. Jika saya menambahkan properti dan mengatakan itu adalah kunci asing, saya mendapatkan kesalahan. Tetapi jika saya tidak memiliki properti, maka EF akan membuatnya. Apa bedanya?PrimayBarId
properti diFoo
entitas. Kemungkinan solusi yang sama yang Anda coba. Keterbatasan dalam EF mungkin?