方法保存更改失败

时间:2019-03-05 17:14:15

标签: c# asp.net-mvc entity-framework

我有一个post方法可以创建一个新的奶油

public ActionResult CreateCream(CreamModel cream, string creamTypeId)
    {
        if (ModelState.IsValid)
        {
            if (creamTypeId != string.Empty)
            {
                try
                {
                    cream.CreamTypeModel_id = int.Parse(creamTypeId);
                    creamManager.CreateCream(cream);
                    TempData["message"] = string.Format("Игрок {0} сохранен", cream.Name);
                    return RedirectToAction("Index", "Home");
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.Message);
                }
            }
        }

        ViewBag.ChoosingCreamType = GetCreamSelectList();
        return View(cream);
    }

我打电话时

public void CreateCream(CreamModel newCream)
    {
        if (newCream.Id == 0)
        {
            context.CreamModels.Add(newCream);
            context.SaveChanges();
        }
    } 

当我调用context.SaveChanges()时,代码失败,我转到View,而不是redirect!我不明白为什么它不起作用?如果我删除SaveChanges(),它会执行,但不会保存在数据库中。

我的模特

public class CreamModel
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public string ImageName { get; set; }

    public int? CreamTypeModel_id { get; set; }
    public CreamTypeModel CreamTypeModel { get; set; }
}

错误消息

  

SqlException:列名“ CreamTypeModel_id”的指定更多   在一次INSERT的SET子句或列列表中进行一次以上。一栏   不能在同一子句中分配多个值。修改   子句以确保列仅更新一次。如果这   语句更新或在视图中插入列,列别名可以   隐藏代码中的重复项。

1 个答案:

答案 0 :(得分:1)

想到的问题是,您之间没有建立FK的关系:

public class CreamModel
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public string ImageName { get; set; }

    [ForeignKey("CreamTypeModel")] 
    public int? CreamTypeModel_id { get; set; }
    public virtual CreamTypeModel CreamTypeModel { get; set; }
}

这会将FK链接到关联的参考属性。