Отношения многие ко многим | Вставить | удалять - PullRequest
1 голос
/ 26 марта 2011

Я начал использовать Entity Framework (используя POCO-классы) для проекта MVC 3 C # с Razor Views.

У меня проблемы с реализацией функций «многие ко многим» с ним

Я пытаюсьСоздать представление, которое позволяет пользователю добавлять телефонные номера, электронные письма, музыкальные типы, флаги, удержания, ntoes и т. д. через отношения «многие ко многим»

т.е.) Компания ----> CompanyVenue <---- Место проведения </strong>

Мне удалось получить EF, который хранит Место, а затем смог назначить Место позднее, выбрав Место в списке и назначив его Компании.

Есть ли способ получить у Места для автоматического сохранения отношения между Компанией и Местом без необходимости выбирать его через список?

Если это невозможно, может ли кто-нибудь поделиться лучшимспособ реализации с использованием EF.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2013

Вот как это сделать вручную в Code First. Во-первых, ваши классы POCO могут выглядеть примерно так:

public class Company
{
    public Company()
    {
        Venues = new List<Venue>();
    }
    public int CompanyID { get; set; }
    public string CompanyName { get; set; }
    public virtual ICollection<Venue> Venues { get; set; }
}

public class Venue
{
    public int VenueID { get; set; }
    public string VenueName { get; set; }
    public virtual ICollection<Company> Companies { get; set; }
}

В вашем DbContext:

public IDbSet<Company> Companies { get; set; }
public IDbSet<Venue> Venues { get; set; }

Также в классе DbContext переопределяют метод OnModelCreating. Вот как вы отображаете отношения «многие ко многим» между Компанией и Местом проведения:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Company>()
        .HasMany(comp => comp.Venues)
        .WithMany(venue => venue.Companies)
        .Map(mc =>
        {
        mc.ToTable("T_Company_Venue");
        mc.MapLeftKey("CompanyID");
        mc.MapRightKey("VenueID");
        }
    );

    base.OnModelCreating(modelBuilder);
}

Я ответил на другой вопрос EF многие ко многим с полным примером кода здесь:

MVC много ко многим

Я также написал вышеупомянутое в 2 сообщениях блога с полным решением и примером кода, доступным для загрузки:

Часть 1:

Сохранение многих для многих часть 1

Часть 2:

Сохранение многих для многих часть 2

0 голосов
/ 07 апреля 2011

Просто с помощью этой простой настройки:

public Company
{
    public virtual ICollection<Venue> Venues { get; set; }
}

public Venue
{
    public virtual ICollection<Company> Companies { get; set; }
}

EF сможет определить, что вы объявляете отношение «многие ко многим».Я не знаю, используете ли вы EF 4.1 Code First или модельера, но Code First следовало бы поработать над этим, чтобы создать для вас таблицу CompanyVenue.И дизайнер модели определит для вас таблицу «ссылок», как только вы объявите отношение «многие ко многим».

Обратите внимание, что свойства навигации помечены как virtual.Это необходимо в случае коллекций, чтобы EF мог правильно обновлять связанные объекты.

...