【发布时间】:2018-12-09 03:54:13
【问题描述】:
我有两个通过一对多关系关联的类。一个类别可以有多个产品,一个产品只能有一个类别。
型号
模型/Category.cs:
namespace Projeto.Models
{
public class Category
{
public int CategoryId { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get ; set; }
public ICollection<CategoryCategory> CategoryParent { get; set; }
public ICollection<CategoryCategory> CategoryChild { get; set; }
}
}
模型/Product.cs:
namespace Projeto.Models
{
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public virtual Category Category { get; set; }
}
问题
当我执行 POST 或 PUT,尝试更新给定产品的“类别”时,返回以下错误:
请求正文(HttpPut):
{
"productId": 1,
"name": "testing",
"category": 1
}
回复:
{
"category": [
"Error converting value 1 to type 'Projeto.Models.Category'. Path 'category', line 4, position 15."
]
}
可能的解决方案
我已经尝试了多种“虚拟”数据类型的组合,我已经看到它解决了这个问题,但永远无法修复错误并使 CRUD 操作按预期运行。我也尝试了 [ForeignKey] 数据注释,再次没有运气:
public int CategoryMetaID;
[ForeignKey("CategoryMetaID")]
public virtual Category Category { get; set; }
诚然,我对 C#、ASP.NET MVC 或实体框架本身知之甚少,所以这可能是一个非常新手的错误。但是,我设法设置了一个可以发布和更新多对多关系(产品有产品)的工作 API,但似乎无法解决这个单对多外键关系问题。
任何启示将不胜感激。 提前致谢!
【问题讨论】:
-
您必须提供更新数据库的 api 和代码。在这里,您只是提供了模型,而这些信息不足以找到问题
-
包含更新数据库代码的控制器是通过脚手架生成的。 HttpPut sn-p:pastebin.com/yNVBinbi
标签: c# asp.net asp.net-mvc entity-framework foreign-keys