Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como expresso um relacionamento tem muitos no Entity Framework 5?


Você tem um tipo de dados que está chamando de nomes separados. Isso é um pouco confuso. No entanto, para que isso funcione com o código primeiro, você só precisa da seguinte configuração fluente em sua classe DbContext personalizada:
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");
       });
}

Isso assumindo que sua classe de usuário se parece com isso:
[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; }
}

Se você usar o método acima, cada objeto de usuário que tiver terá uma propriedade de navegação nele chamado Buddies. Ao consultar usuários, você desejará carregar ansiosos usuários amigos , Faz:
context.users.Include("Buddies")

Além disso, para resolver seu problema com vários leitores. É porque você não enumerou a consulta (db.users) do seu primeiro loop. Para resolver isso, você pode enumerar a consulta assim:
var users = context.users.Include("Buddies").ToList();
foreach(var user in users)....

E se você usar a configuração acima, você não precisa tentar combinar os id's, basta adquirir a lista (campo nulo se novo) de amigos do usuário usando a propriedade de navegação dos amigos (virtual, carregado com preguiça), faça:
user.Buddies

Como você pode ver, você realmente não precisa de um 'Model.buddy' (já que ele contém apenas um mapeamento de id) O framework de entidade cuidará da vinculação. No entanto, se você nem sempre inclui os amigos na consulta do usuário, talvez queira a tabela. Que seria consultado com LINQ da seguinte maneira:
var userBuddies = db.buddies.Where(buddy=>buddy.user_id == user.id).ToList();
//An enumerated list of user buddies 
//do stuff