Entity Framework Code First: пользовательское сопоставление - PullRequest
2 голосов
/ 11 августа 2011
public class User
{
   public int Id {get;set;}

   public string Name {get;set}

   public ICollection<User> Followers {get;set;}
   public ICollection<User> Following {get;set;}
}

Моя модель выглядит выше, Entity Framework автоматически создает таблицу и UserUser со строками User_ID и User_ID1 в БД для отображения этой модели.Я хочу отобразить эту таблицу и строки самостоятельно.

Как я могу это сделать, спасибо !!

Ответы [ 2 ]

2 голосов
/ 13 августа 2011

Чтобы отобразить сущность на себя, вы должны сделать что-то вроде этого

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().HasMany(u => u.Followers)
        .WithMany().ForeignKey(u => u.FollowerId);

    base.OnModelCreating(modelBuilder);
}

Трудно сказать, не видя модель вашей базы данных, и того, как вы на самом деле связываете последователей с пользователем.

2 голосов
/ 11 августа 2011

Из Блог Скотта Гу о Многозначные ассоциации :

Ассоциации "многие ко многим" Ассоциация между категорией и элементом является многозначной.связь со многими, как видно из приведенной выше диаграммы классов.Отображение связи «многие ко многим» скрывает промежуточную таблицу связей от приложения, поэтому вы не получите нежелательную сущность в своей доменной модели.Тем не менее, в реальной системе у вас может не быть связи «многие ко многим», поскольку мой опыт показывает, что почти всегда есть другая информация, которая должна быть прикреплена к каждой ссылке между связанными экземплярами (например, дата и время, когда элементбыл добавлен в категорию), и что наилучший способ представления этой информации - через промежуточный класс ассоциации (в EF вы можете отобразить класс ассоциации как объект и отобразить две ассоциации «один ко многим» для каждой стороны.).

В отношении «многие ко многим» таблица соединений (или таблица ссылок, как ее называют некоторые разработчики) имеет два столбца: внешние ключи таблиц Category и Item.Первичный ключ является составной частью обоих столбцов. В EF Code First отображения многих ко многим ассоциациям можно настроить с помощью свободно распространяемого кода API, например:

    class ItemConfiguration : EntityTypeConfiguration<Item> {
    internal ItemConfiguration()
    {
        this.HasMany(i => i.Categories)
            .WithMany(c => c.Items)
            .Map(mc =>
            {
                mc.MapLeftKey("ItemId");
                mc.MapRightKey("CategoryId");
                mc.ToTable("ItemCategory");
            });
    } }

Зарегистрируйте эту конфигурацию в вашем DbContext (вы используетеAPI-интерфейс DbContext, верно?) вот так:

  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    base.OnModelCreating(modelBuilder);

    modelBuilder.Configurations.Add(new ItemConfiguration());
  }

Удачи, надеюсь, это поможет!

...