Asp.net mvc 创建时出现外键约束错误

Asp.net mvc 创建时出现外键约束错误,asp.net-mvc,ef-code-first,Asp.net Mvc,Ef Code First,在尝试向剑道UI网格添加新项时,特别是在SaveChanges事件中,我遇到以下错误: 这是我用来添加新项目的代码: public int CreateItem(ItemViewModel viewModel) { var item = new Item(); viewModel.CopyToItem(item); db.Items.Add(item); db.SaveChanges(); return item.ItemId; } 项目视图

在尝试向剑道UI网格添加新项时,特别是在SaveChanges事件中,我遇到以下错误:

这是我用来添加新项目的代码:

public int CreateItem(ItemViewModel viewModel)
{
     var item = new Item();
     viewModel.CopyToItem(item);

     db.Items.Add(item);
     db.SaveChanges();
     return item.ItemId;
}
项目视图模型:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ItemId { get; set; }
public string Description { get; set; }
public int CategoryId { get; set; }

public virtual Category Category { get; set; }

public void CopyToItem(Item item)
{
    item.ItemId = this.ItemId;
    item.Description = this.Description;
    item.CategoryId = this.CategoryId;
}
类别模型:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int CategoryId{get;set;}
公共字符串CategoryName{get;set;}
公共虚拟ICollection项{get;set;}

我不确定是什么问题。非常感谢您的帮助。

您必须将CategoryId设置为有效值。ViewModel中是否有CategoryId?

结果是视图中的剑道网格代码有问题。我把Category作为专栏而不是CategoryId。我的坏朋友,应该更敏锐一些。感谢您的建议和查看我的问题。

我认为错误与KendoBasic无关。
类别表中不存在您为新项目添加的
类别ID
。因为它是外键,所以它必须存在。@Neel-我已经删除了对剑道用户界面的引用,谢谢你指出这一点。“Categories”表不包含“CategoryId”列,并且存在相应的值。请调试代码。您试图保存的项目很可能具有不正确的CategoryId,因为错误明确地告诉您这就是问题所在。感谢您的建议,我将检查我的代码。可能是从视图传递的空值。是的,如我问题中发布的ViewModel代码所示。
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ItemId { get; set; }
public string Description { get; set; }
public int CategoryId { get; set; }

public virtual Category Category { get; set; }

public void CopyToItem(Item item)
{
    item.ItemId = this.ItemId;
    item.Description = this.Description;
    item.CategoryId = this.CategoryId;
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int CategoryId { get; set; }
public string CategoryName { get; set; }

public virtual ICollection<Item> Items { get; set; }