Enum as Key en Entorno de entidad 5 error de lanzamiento en muchas a muchas combinaciones

Bien, esto es un poco largo / oscuro, pero recibo un error impar en una situación específica en la que utilizo un Enum como clave de tabla e intento realizar consultas en la tabla mientras se incluyen más de una o varias entidades relacionadas.

El error del código de ejemplo a continuación es:

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

En un proyecto web .net 4.5, tengo la siguiente configuración de entidad:

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;
    }
}

En el archivo Global.asax.cs inicializo la base de datos:

 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();
        }

Entonces, intento consultar en la base de datos:

var context = new EnumTestContext();

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

Otras consultas en las que utilizo una sola inclusión cargan los datos esperados sin problema. La consulta anterior, con dos incluye lanza el error anterior. En la base de datos veo tablas de unión generadas automáticamente (MenuDiets y RecipeDiets) y todos los datos parecen correctos. Nuevamente, como en los ejemplos anteriores, puedo consultar los datos pero no puedo incluir varias entidades relacionadas sin lanzar el error.

Si cambio la última consulta para usar solo una inclusión, puedo cargar la otra tabla sin problema:

        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;
        }

Además, aunque esto no satisface mi caso de uso, ya que quiero restringir la tabla a solo los valores de enumeración y las restricciones únicas no se admiten en EF. Esto funcionará si cambio la clase de entidad Dieta para usar una clave de identidad separada, en lugar de que la tecla Enum:

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

Otra solución posible que exploré fue crear explícitamente las tablas de combinación (MenuDiets y RecipeDiets) para que la clave de propiedad de la combinación se escribiera como Enum, pero esto aún devolvió el error anterior.

Realmente parece ser que los múltiples incluidos están causando que se ahogue. ¿Alguna idea sobre si estoy haciendo algo mal en la configuración del modelo? La consulta en sí? Un error en Entity Framework?

Respuestas a la pregunta(1)

Su respuesta a la pregunta