Enum as Key in framework framework 5 rzuca błąd na wiele lub wiele złączeń

OK, jest to trochę długie / niejasne, ale dostaję dziwny błąd w konkretnej sytuacji, w której używam Enum jako klucza tabeli i próbuję zapytać o tabelę, włączając więcej niż jedną jednostkę powiązaną wiele do wielu.

Błąd z poniższego przykładowego kodu:

The type of the key field 'DietIs' is expected to be 'MvcApplication8.Models.DietIs', but the value provided is actually of type 'System.Int32'.

W projekcie WWW .net 4.5 mam następującą konfigurację encji:

public enum DietIs {
    None,
    Kosher,
    Paleo,
    Vegetarian
}

public class Diet {

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public DietIs DietIs { get; set; }

    public string Description { get; set; }
    public virtual ICollection<Recipe> Recipes { get; set; }
    public virtual ICollection<Menu> Menus { get; set; }
}

public class Recipe {
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Diet> Diets { get; set; }
}

public class Menu {
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Diet> Diets { get; set; }
}

public class EnumTestContextInit : DropCreateDatabaseAlways<EnumTestContext> {}

public class EnumTestContext : DbContext {
    public DbSet<Diet> Diets { get; set; }
    public DbSet<Menu> Menus { get; set; }
    public DbSet<Recipe> Recipes { get; set; }

    public EnumTestContext() : base("EnumTestContext") {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    }
}

W pliku Global.asax.cs inicjalizuję bazę danych:

 Database.SetInitializer(new EnumTestContextInit());
        using (var context = new EnumTestContext()) {

            var noDiet = new Diet { DietIs = DietIs.None, Description = "Whatever you want" };
            var paleoDiet = new Diet { DietIs = DietIs.Paleo, Description = "Like paleolithic peoples" };
            var vegDiet = new Diet { DietIs = DietIs.Vegetarian, Description = "No meat" };

            context.Menus.Add(new Menu { Name = "Cheese burger with Fries Menu", Diets = new List<Diet> { noDiet } });
            context.Menus.Add(new Menu { Name = "Mammoth Steak Tartar with Nuts Menu", Diets = new List<Diet> { paleoDiet, noDiet } });
            context.Menus.Add(new Menu { Name = "Soy Cheese Pizza Menu", Diets = new List<Diet> { vegDiet, noDiet } });

            context.Recipes.Add(new Recipe {Name = "Cheese burger", Diets = new List<Diet> {noDiet}});
            context.Recipes.Add(new Recipe { Name = "Mammoth Steak Tartar", Diets = new List<Diet> { paleoDiet, noDiet} });
            context.Recipes.Add(new Recipe { Name = "Cheese Pizza", Diets = new List<Diet> { vegDiet, noDiet } });

            context.SaveChanges();
        }

Następnie próbuję wysłać zapytanie do bazy danych:

var context = new EnumTestContext();

        var dietsWithMenusAndRecipes = context.Diets
                  .Include(e => e.Menus)
                  .Include(e => e.Recipes)
                  .ToList();

Inne zapytania, w których używam pojedynczego, obejmują ładowanie oczekiwanych danych bez problemu. Zapytanie powyżej, z dwoma włączeniami, powoduje zgłoszenie błędu powyżej. W bazie danych widzę automatycznie połączone tabele (MenuDiets i RecipeDiets) i wszystkie dane wyglądają poprawnie. Ponownie, tak jak w powyższych przykładach, mogę wysyłać zapytania do danych, ale nie mogę uwzględniać wielu powiązanych jednostek bez zgłaszania błędu.

Jeśli zmienię ostatnią kwerendę, aby używać tylko pojedynczego dołączenia, mogę załadować inną tabelę bez problemu:

        var dietsWithMenusAndRecipes = context.Diets
                 .Include(e => e.Menus).ToList();

        foreach (var item in dietsWithMenusAndRecipes) {
            context.Entry(item).Collection(e => e.Recipes).Load();
            var rec = item.Recipes;
        }

Ponadto - choć nie spełnia mojego przypadku użycia, ponieważ chcę ograniczyć tabelę tylko do wartości wyliczeniowych i ograniczeń unikalnych nie jest obsługiwanych w EF - to zadziała, jeśli zmienię klasę jednostki Diet na oddzielny klucz tożsamości, a raczej niż klucz Enum:

    public int Id { get; set; }
    public DietIs DietIs { get; set; }

Innym możliwym rozwiązaniem, które zbadałem, było jawne utworzenie tabel łączenia (MenuDiets i RecipeDiets), tak aby klucz właściwości łączenia został wpisany jako Enum, ale to wciąż zwróciło powyższy błąd.

Naprawdę wydaje się, że jest to wiele Includes, które powodują, że się dusi. Jakieś pomysły, czy robię coś złego w konfiguracji modelu? Samo zapytanie? Błąd w Entity Framework?

questionAnswers(1)

yourAnswerToTheQuestion