Serialisierung von Entity Framework-Objekten mit einer zu vielen Beziehung

Ich versuche, EF mit Code First und der Web-API zu verwenden. Ich habe keine Probleme, bis ich mit der Serialisierung von Many-to-Many-Beziehungen anfange. Wenn ich versuche, die folgende Web-API-Methode auszuführen, wird die folgende Fehlermeldung angezeigt:

public class TagsController : ApiController
{

        private BlogDataContext db = new BlogDataContext();

        // GET api/Tags
        public IEnumerable<Tag> GetTags()
        {
            return db.Tags.AsEnumerable();
        }
}

Ich erhalte folgenden Fehler:

'System.Data.Entity.DynamicProxies.Tag_FF17EDDE6893000F7672649A39962DB0CA591C699DDB73E8C2A56203ED7C7B6D' mit dem Namen des Datenvertrags 'Tag_FF17EDDE6893000F7672649A39962DB0CA591C6991C699D3D73A:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies'wird nicht erwartet. Ziehen Sie die Verwendung eines DataContractResolver in Betracht, oder fügen Sie statisch nicht bekannte Typen zur Liste der bekannten Typen hinzu, z. B. mithilfe des Attributs KnownTypeAttribute oder indem Sie sie zur Liste der bekannten Typen hinzufügen, die an DataContractSerializer übergeben werden.

Ich habe einige SO-Artikel gelesen (Artikel 1, Artikel 2), dass das Update das folgende Attribut hinzufügen soll:

[DataContract (IsReference = true)]

aber das hat keine wirkung gehabt. Auch die Verwendung von [IgnoreDataMember] hat keine Auswirkung. Die einzige Option, die zu funktionieren scheint, besteht darin, Configuration.ProxyCreationEnabled auf false zu setzen. Ist das meine einzige Option? Vermisse ich etwas?

Beispiel-POCO-Objekte:

Etikett

[DataContract(IsReference = true)]
public class Tag
{
        public Tag()
        {
            this.Blogs = new HashSet<Blog>();
        }

        [Key]
        [DataMember]
        public int Id { get; set; }

        [DataMember]
        public string Name { get; set; }

        [IgnoreDataMember]
        public virtual ICollection<Blog> Blogs { get; set; }
}

Blog

[DataContract(IsReference = true)]
public class Blog
{
    public Blog()
    {
        this.Tags = new HashSet<Tag>();
    }

    [Key]
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }

    [IgnoreDataMember]
    public virtual ICollection<Tag> Tags { get; set; }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage