sql >> Databasteknik >  >> RDS >> Mysql

Hur uttrycker jag en har många genom relation i Entity Framework 5?

Du har en datatyp som du kallar separata namn. Det är lite förvirrande. Men för att få detta att fungera med kod först behöver du bara följande flytande konfiguration i din Custom DbContext-klass:

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");
       });
}

Detta förutsatt att din användarklass ser ut så här:

[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; }
}

Om du använder metoden ovan kommer alla användarobjekt du har att ha en navigeringsegenskap på det som heter Buddies. När du frågar efter användare vill du ivriga ladda kompisanvändare , gör:

context.users.Include("Buddies")

Vidare för att lösa ditt problem med flera läsare. Det beror på att du inte har uppräknat frågan (db.users) från din första loop. För att adressera det kan du räkna upp frågan så här:

var users = context.users.Include("Buddies").ToList();
foreach(var user in users)....

Och om du använder konfigurationen ovan behöver du inte försöka matcha id:n, du skaffar bara listan (nullfält om ny) över kompisar från användaren med buddies navigeringsegenskap (virtuell, lat laddad), gör:

user.Buddies

Som du kan se behöver du egentligen inte en 'Model.buddy' (eftersom den bara innehåller en id-mappning) Entity framework kommer att ta hand om länkningen. Men om du inte alltid inkluderar kompisarna i din användarfråga kanske du vill ha tabellen. Vilket skulle frågas med LINQ på följande sätt:

var userBuddies = db.buddies.Where(buddy=>buddy.user_id == user.id).ToList();
//An enumerated list of user buddies 
//do stuff



  1. Kan någon förklara Magentos indexeringsfunktion i detalj?

  2. Hur väljer man grupperade rader med endast NULL-värden?

  3. Hur man hämtar poster som innehåller alfanumeriska tecken + blanksteg

  4. Hur man listar databaser och tabeller i PostgreSQL