Code First EF 4.1 : Many to Many Relationship

Пока в Visual Studio нет конструктора, поддерживающего связь многие-ко-многим, хотя в Light Switch и есть эта опция (при настройке связей между источниками данных) - она все равно не работает, так и пишет - мол не поддерживается

Зато есть Code First - возможность сначала писать код, и не задумываться о создании/обновлении структуры базы данных.
Более подробно о Code First можете почитать, к примеру, на хабре

Итак, для создания связи многие ко многим в каждый класс, описывающий сущности, связанные логически множественной связью между собой добавляем свойство на связанные сущности реализующее интерфейс ICollection<ТипКлассаСвязанныхСущностей>


В конструкторе класса инициализируем свойство генерик-классом HashSet по типу связанных элементов.


Собственно можно пользоваться, промежуточная таблица, через которую собственно и идет связь многие-ко-многим, создается автоматически (рисунок ниже), так что об этом задумываться не приходится - описываем модели, используем и в БД не лазаем, как минимум в мелких проектах.


public class Emp
{
    public Emp()
    {
        Projects = new HashSet();
    }

    public int EmpId { get; set; }
    public string EmpName { get; set; }
    public ICollection Projects { get; set; }
}

public class Project
{
    public Project()
    {
        Emps = new HashSet();
    }

    public int ProjectId { get; set; }
    public string ProjectName { get; set; }
    public ICollection Emps { get; set; }
}

public class EmpContext : DbContext
{
    public DbSet Emps { get; set; }
    public DbSet Projects { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var p1 = new Project() { ProjectName = "Fun Boat" };
        var p2 = new Project() { ProjectName = "Jumbo Jet" };
        var p3 = new Project() { ProjectName = "Free Zoo" };

        var e1 = new Emp() { EmpName = "Wriju" };
        var e2 = new Emp() { EmpName = "Wrishika" };
        var e3 = new Emp() { EmpName = "Saswati" };

        p1.Emps.Add(e1);
        p1.Emps.Add(e2);

        p2.Emps.Add(e2);
        p2.Emps.Add(e3);

        p3.Emps.Add(e3);
        p3.Emps.Add(e1);

        using (var ctx = new EmpContext())
        {
            ctx.Projects.Add(p1);
            ctx.Projects.Add(p2);
            ctx.Projects.Add(p3);
                
            ctx.SaveChanges();
        }
    }
}

Код взят отсюда

image

Комментариев нет:

Отправить комментарий

Можете оставить свой комментарий