在MVC中,如何更新与另一个表/模型相关的列数据?

时间:2015-07-10 16:37:47

标签: asp.net-mvc entity-framework

假设我将这两个作为例子:

public class Cat
{
    public int Id { get; set; }
    public string Name { get; set }
    public CatColor Color { get; set; } // I'd like to change this value
}

public class CatColor
{
    public int Id { get; set; }
    public string Color { get; set }
}

我有一个表单提示Cat值,Id(自动生成),名称,颜色。我没有更新/创建名称的问题,但颜色值根本没有变化。

在数据库中,可以将CatColor分配给许多猫。这应该是一项简单的任务,但我现在已经盯着它看了一段时间。

在我的控制器中,我有类似的东西:

   public ActionResult SaveCat(Cat objCat)
   {
        Cat oc = db.Cat.Include(d => d.CatColor).ToList().SingleOrDefault(m => m.Id == objCat.Id);
        oc.Name = objCat.Name;
        // oc.CatColor.Color = objCat.Color ???
        ...
        db.SaveChanges();
        return ..
   }

只是想知道我该怎么做。

1 个答案:

答案 0 :(得分:0)

您缺少ForeignKey数据注释

public class Cat
{
    public int Id { get; set; }
    public string Name { get; set }
    public int ColorId { get; set; }
    [ForeignKey("ColorId")]
    public CatColor Color { get; set; } 
}
你可以这样做:

public ActionResult SaveCat(Cat objCat)
{
        Cat oc = db.Cat.Include(d => d.CatColor).ToList().SingleOrDefault(m => m.Id == objCat.Id);
     oc.Name = objCat.Name;
     oc.CatColor.ColorId = objCat.ColorId
     ...
     db.SaveChanges();
     return ..
}

注意:如果在您的视图中有一个包含所有可能的CatColors的下拉列表,则可以非常轻松地填充objCat.ColorId

修改

我已将外键数据注释放在错误的属性中......我的错误。