Anda memiliki satu tipe data yang Anda sebut nama terpisah. Itu sedikit membingungkan. Namun Untuk membuatnya bekerja dengan kode terlebih dahulu, Anda hanya perlu konfigurasi lancar berikut di kelas DbContext Kustom Anda:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<user>().
HasMany(c => c.Buddies).
WithMany().
Map(
m =>
{
m.MapLeftKey("user_id");
m.MapRightKey("buddy_id");
m.ToTable("buddies");
});
}
Ini dengan asumsi kelas pengguna Anda terlihat seperti ini:
[Table("user")]
public class user
{
public int id { get; set; }
public string name { get; set; }
public string email { get; set; }
public virtual List<user> Buddies { get; set; }
}
Jika Anda menggunakan metode di atas, setiap objek pengguna yang Anda miliki akan memiliki properti navigasi di atasnya disebut Sobat. Saat menanyakan pengguna, Anda ingin bersemangat memuat pengguna sobat , lakukan:
context.users.Include("Buddies")
Selanjutnya, Untuk mengatasi masalah Anda dengan banyak pembaca. Itu karena Anda belum menghitung kueri (db.users) dari loop pertama Anda. Untuk mengatasinya Anda dapat menghitung kueri seperti ini:
var users = context.users.Include("Buddies").ToList();
foreach(var user in users)....
Dan jika Anda menggunakan konfigurasi di atas, Anda tidak perlu mencoba dan mencocokkan id, Anda cukup mendapatkan daftar (bidang nol jika baru) teman dari pengguna menggunakan properti navigasi sobat (virtual, malas dimuat), lakukan:
user.Buddies
Seperti yang Anda lihat, Anda tidak benar-benar membutuhkan 'Model.buddy' (karena hanya berisi pemetaan id) Kerangka entitas akan menangani penautan. Namun jika Anda tidak selalu menyertakan Sobat dalam kueri pengguna, Anda mungkin menginginkan tabel tersebut. Yang akan ditanyakan dengan LINQ dengan cara berikut:
var userBuddies = db.buddies.Where(buddy=>buddy.user_id == user.id).ToList();
//An enumerated list of user buddies
//do stuff