我在映射这些实体时遇到了问题。我对此有些新意,所以我不确定我在哪里弄乱。任何建议或帮助将不胜感激。
这是错误: 在模型生成期间检测到一个或多个验证错误:
Recipe_RecipeIngredients_Source ::多重性在角色' Recipe_RecipeIngredients_Source'中无效。在关系&Recipe_RecipeIngredients'。由于“从属角色”是指关键属性,因此“从属角色”的多重性的上限必须为“' 1”。
这是我有两张桌子的图表
我的映射代码如下:
public class RecipeMap : EntityTypeConfiguration<Recipe>
{
public RecipeMap()
{
HasKey(g => g.RecipeId);
ToTable("recipes");
Property(g => g.RecipeId).HasColumnName("RecipeId");
Property(g => g.Title).HasColumnName("Title");
Property(g => g.Description).HasColumnName("Description");
Property(g => g.IsOnMenu).HasColumnName("IsOnMenu");
Property(g => g.Url).HasColumnName("Url");
Property(g => g.ImagePath).HasColumnName("ImagePath");
Property(g => g.Calories).HasColumnName("Calories");
Property(g => g.Servings).HasColumnName("Servings");
Property(g => g.TotalTime).HasColumnName("TotalTime");
Property(g => g.PrepTime).HasColumnName("PrepTime");
Property(g => g.CookTime).HasColumnName("CookTime");
this.HasRequired(g => g.RecipeIngredients).WithMany().HasForeignKey(x => x.RecipeId);
}
}
public class RecipeIngredientMap : EntityTypeConfiguration<RecipeIngredient>
{
public RecipeIngredientMap()
{
HasKey(g => g.IngredientId);
ToTable("recipeIngredient");
Property(g => g.RecipeId).HasColumnName("RecipeId").IsRequired();
Property(g => g.IngredientName).HasColumnName("IngredientName");
Property(g => g.Quantity).HasColumnName("Quantity");
Property(g => g.Category).HasColumnName("Category");
Property(g => g.IsOnMenu).HasColumnName("IsOnMenu");
//this.HasRequired(g => g.Recipe);
}
}
public class RecipeContext : DbContext
{
public virtual DbSet<RecipeIngredient> RecipeIngredients { get; set; }
public virtual DbSet<Recipe> Recipes { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new RecipeMap());
modelBuilder.Configurations.Add(new RecipeIngredientMap());
}
}
答案 0 :(得分:1)
One Recipe有多种成分,因为它似乎暗示了映射中的错误关系。
从RecipeMap()中删除hasRequired并将以下内容添加到RecipeIngredientMap()
this.HasRequired(g => g.Recipes)
.WithMany(y => y.RecipesIngredient)
.HasForeignKey(x => x.RecipeId);
答案 1 :(得分:1)
我暂时没有使用Entity Framework,所以这可能不是严格正确的。
我假设您的课程看起来像这样:
public class Recipe
{
public int ID { get; set; }
public string Title { get; set; }
// Other code
// Navigation property
public virtual ICollection<RecipeIngredient> Ingredients { get; set; }
}
public class RecipeIngredient
{
public int ID { get; set; }
public int RecipeID { get; set; }
// Other code
}
我认为您尝试描述的关系(我可能不正确)是Recipe
有很多Ingredients
,所以我会在RecipeMap
中尝试这一点(使用你自己的财产名称):
this.HasMany(x => x.Ingredients) // A Recipe has many ingredients.
.WithRequired() // Ingredient requires a recipe.
.HasForeignKey(x => x.RecipeID); // Our Foreign Key on Ingredient.
稍微说,看起来你的数据模型可以通过引入一个结点/链接表来进一步标准化,例如RecipeIngredients
(或转换你已经拥有的表),包含字段RecipeID
和IngredientID
,Quantity
。
然后,您可以将与Ingredient
特定相关的所有字段提取到Ingredients
表中,并保存一些成分数据重复。