You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中如何为模型属性设置多个值?(Cookie关联Ingredient问题)

问题:实现Cookie与多个Ingredient的关联(MVC + EF Core)

我是MVC和SQL管理的新手,现有需求:需为模型的一个属性设置多个值。我创建了Cookie模型和Ingredient模型,一个Cookie由多个Ingredient组成,希望在列表中同时显示Cookie名称及其对应的Ingredient。

以下是我的模型代码:
Cookie模型:

public class Cookie
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public List<Ingredient> Ingridients { get; set; }
    public DateTime CreatedDateTime { get; set; } = DateTime.Now;
}

Ingredient模型:

public class Ingredient
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
}

我原本以为在Cookie模型中添加Ingredients列表属性即可实现,但执行数据库迁移后,Cookie数据表中仅包含Id、Name和CreatedDateTime字段,无法关联多个Ingredient。请问该如何实现一个Cookie关联多个Ingredient?


解决方案

1. 为Ingredient添加外键关联

EF Core需要明确的外键来维护一对多关系。因为一个Cookie对应多个Ingredient,所以要在Ingredient模型中添加指向Cookie的外键和导航属性:

public class Ingredient
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    // 外键:关联Cookie的Id
    public int CookieId { get; set; }
    // 导航属性:指向所属的Cookie
    public Cookie Cookie { get; set; }
}

2. 修正Cookie模型的拼写错误

你的Cookie模型中列表属性拼写为Ingridients(多了一个d),建议统一改为Ingredients,避免后续查询或视图渲染出错:

public class Cookie
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public List<Ingredient> Ingredients { get; set; }
    public DateTime CreatedDateTime { get; set; } = DateTime.Now;
}

3. 显式配置DbContext关系(可选但推荐)

如果EF Core未自动识别关系,可在DbContext的OnModelCreating方法中手动配置一对多关联:

public class YourDbContext : DbContext
{
    public DbSet<Cookie> Cookies { get; set; }
    public DbSet<Ingredient> Ingredients { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Cookie>()
            .HasMany(c => c.Ingredients)  // 一个Cookie对应多个Ingredient
            .WithOne(i => i.Cookie)        // 一个Ingredient属于一个Cookie
            .HasForeignKey(i => i.CookieId); // 指定外键字段
    }
}

4. 重新执行数据库迁移

修改模型后,重新生成并应用迁移,更新数据库结构:

Add-Migration AddCookieIngredientRelationship
Update-Database

5. 查询时加载关联数据

要在列表中同时显示Cookie和对应的Ingredient,查询时需用Include方法加载关联的Ingredients集合:

// 在Controller中
public IActionResult Index()
{
    var cookies = _context.Cookies.Include(c => c.Ingredients).ToList();
    return View(cookies);
}

6. 在视图中渲染关联数据

在Razor视图中,通过嵌套循环遍历Cookie及其Ingredients:

@model List<Cookie>

<h1>Cookies & Ingredients</h1>
<ul>
    @foreach (var cookie in Model)
    {
        <li>
            <strong>@cookie.Name</strong>
            <ul>
                @foreach (var ingredient in cookie.Ingredients)
                {
                    <li>@ingredient.Name</li>
                }
            </ul>
        </li>
    }
</ul>

内容的提问来源于stack exchange,提问作者davidmark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:17:22