这将创建两个表“Ingredient”和“Recipe”以及一个用于多对多映射的附加表。
public class DC : DbContext {
public DbSet<Ingredient> Ingredients { get; set; }
public DbSet<Recipe> Recipes { get; set; }
}
public class Ingredient {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Recipe> Recipes { get; set; }
}
public class Recipe {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Ingredient> Ingredients { get; set; }
}
问题:我想在实体框架创建的第三个映射表中包含其他列“数量”。如何做到这一点?提前谢谢。
答案 0 :(得分:3)
当你得到一些额外的信息时,我怀疑它不会再被视为一个映射表 - 它不是只是一个多对多的映射。我认为你应该把它建模为另一个表:
public class Ingredient {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<RecipePart> RecipeParts { get; set; }
}
public class RecipePart {
public int Id { get; set; }
public Ingredient { get; set; }
public Recipe { get; set; }
// You'll want to think what unit this is meant to be in... another field?
public decimal Quantity { get; set; }
}
public class Recipe {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<RecipePart> Parts { get; set; }
}
所以现在你没有真正的多对多映射 - 你有两个普通的多对一映射。你肯定需要在你的模型中暴露出“配料到配方”的映射吗?如果您想查找使用特定成分的所有食谱,您可以随时进行查询,例如:
var recipies = DB.Recipies.Where(r => r.Parts
.Any(p => p.Ingredient == ingredient));