我正在寻找ProuctId.i的编辑数据有2个表像Product和productitems.so我点击编辑通过获取数据来获取id但是那个时候我在产品表中通过id获取数据正在获得支持但是在找到列表后,productitems数据就像这个错误一样。
这是我的ProductItmes类:
[Table("ProductItems ")]
public class ProductItems
{
[Key]
public int id { get; set; }
[ForeignKey("Products")]
public int pid {get; set;}
public int Qty { get; set; }
public Decimal Rate { get; set; }
public virtual Products Products { get; set; }
}
这是我的api方法:
public ActionResult GetProductByid(int id)
{
var Pro = db.Product.Find(id);
var ProItemList = db.Promotion_ctc.Where(x => x.pid == Pro.id).ToList();//here i am getting list of items by productid
var Details = new
{
Pro.id,
Pro.name,
Pro.image_url,
ProItemList
};
return Json(new { data = Details });
}
idk我的问题在哪里,任何人都知道,请告诉我。
答案 0 :(得分:1)
在使用MVC和Entity Framework时,有些情况下我们通过在此处声明此属性,让我们的子实体像您一样引用父实体:
public virtual Products Products { get; set; }
对于实体框架来说没问题,但是当你尝试序列化这个时它不是。
发生了什么:
ProductItem
。这就是人们使用ViewModels
的原因。而不是仅仅从您的操作返回您的实体,将它们投影到视图模型中,然后返回它。实际上,您返回的是一个包含ProItemList
的匿名对象,我猜它是List
ProductItems
。只需为它创建一个视图模型:
public class ProductItemViewModel
{
public int ItemId { get; set; }
public int ProductId {get; set;}
public int Qty { get; set; }
public Decimal Rate { get; set; }
// public virtual Products Products { get; set; } NO PRODUCT HERE
}
...然后修复您的操作以返回List
ProductItemViewModel
,而不是直接返回ProductItems
,如下所示:
var ProItemList = db.Promotion_ctc.Where(x => x.pid == Pro.id)
.Select(i => new ProductItemViewModel
{
ItemId = i.ItemId,
ProductId = i.ProductId,
Qty = i.Qty,
Rate = i.Rate
})
.ToList();
var Details = new
{
Pro.id,
Pro.name,
Pro.image_url,
ProItemList
};
return Json(new { data = Details });
}
答案 1 :(得分:0)
仅将必需的列发送到ui
像这样
var passToUi = from s in listResult
select new { s.Id, s.Name };
return Json(passToUi, JsonRequestBehavior.AllowGet);