Entity Framework 6 и коллекции

Я занимаюсь разработкой своего первого приложения для управления объектами. Я'используя EF vesion 6 (от Nuget) и .net 4.0. Однако я'У меня возникли трудности с чем-то, что, на мой взгляд, должно быть чрезвычайно простым. Я'Мы нашли много противоречивых советов и решений в Интернете, но, потратив несколько дней на то, чтобы разобраться, яЯ действительно сбит с толку, и я почти сомневаюсь в некоторых базовых представлениях о Entity Framework. Что я хочу сделать, это:создать простую коллекцию связанных объектов и автоматически удалять их, когда ониудалены от родителя.

Вот'Как я бы смоделировал это в ванили C #. В соответствии с примерами Microsoft предположим, что у нас есть два класса, Post и Tag, например:

public class Post
{
    public string Name { get; set; }
    public string Author { get; set; }

    public ICollection Tags { get; set; }
}

public class Tag
{
    public string Text { get; set; }
    // Possibly other properties here
}

Затем добавить тег так же просто, какmyPost.Tags.Add(myTag) и удаление тега так же просто, как.myPost.Tags.Remove(myTag)

Теперь о стороне Entity Framework: я посмотрел на это и подумал:Внешний ключ, конечно! но у меня было множество проблем с добавлением FK: Теги неудалить из базы данных, когда они были удалены из сообщения,myPost.Tags будет иметь 0 элементов при загрузке из базы данных, несмотря на то, что проводник SQL показывает, что значение PostId было правильным, и т. д.Tag.PostId как ключ, вручную удаляя теги, фактически добавляя тег в контекст как DbSet, устанавливая вручнуюmyTag.Post = null; (Я пытался с Lazy загрузки как включены, так и отключены, для чего этостоит - хотя яЯ бы хотел оставить это, если это возможно)

Теперь (во многом благодаря на первый взгляд противоречивым и чрезмерно сложным примерам) яЯ совершенно сбит с толку и потерян. Может кто-нибудь сказать мне, как именно я должен установить эти отношения в EF? (Я'кстати, используя Code First)

РЕШЕНИЕ:

Благодаря Мохо, яМы придумали эту структуру, которая делает именно то, что я хочу:

public class Post
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Author { get; set; }

    public virtual ICollection Tags { get; set; }

    public Post()
    {
        Tags = new HashSet();
    }
}

public class Tag
{
    [Key, Column(Order=1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string Text { get; set; }
    // Possibly other properties here

    public virtual Post Post { get; set; }
    [Key, Column(Order=2)]
    public virtual int PostId { get; set; }
}

public class TestContext : DbContext
{
    public DbSet Posts { get; set; }
}

КогдаTag удаляется изPosts Коллекция тегов, Entity Framework выдаст DELETE для тега, как показано здесь (# 2):http://www.kianryan.co.uk/2013/03/orphaned-child/

Аналогично, добавление тега к сообщению автоматически выдаст INSERT и установит отношение FK.

Одна вещь, чтобы отметить: убедитесь, что вы используетеvirtual! Я думаю, что это было корнем многих моих разочарований.

Ответы на вопрос(2)

Ваш ответ на вопрос