【发布时间】:2018-02-07 02:21:02
【问题描述】:
我正在调用一个端点并接收一个对象列表,我们称它们为Receipts。每个收据可以包含一个可变数量的列表Vehicles。我想使用由收据 ID 和车辆 ID 组成的复合键保存记录。
我将模型设置为:
public class Receipt
{
[Key]
[Column(Order=1)]
public string id { get; set; }
public int count { get; set; }
public List<Vehicles> vehicles { get; set; }
public class Vehicles
{
[Key]
[Column(Order=2)]
public string id { get; set; }
}
}
接下来,我将 Receipt 添加到 DbContext
public class DbContext : System.Data.Entity.DbContext
{
public DbSet<Receipt> Receipt { get; set; }
}
最后,我插入/更新并保存更改
try
{
using (var dbContext = new DbContext())
{
dbContext.Receipt.AddOrUpdate(receipt);
dbContext.Receipt.SaveChanges();
}
}
我的程序没有捕获任何异常,但表/数据库完全为空。我是否正在构建对象以告知实体框架我希望如何保存这些行?一种选择是遍历收据中的每个车辆,并创建一个新实体来存储收据 ID 和车辆 ID 以及所需的其他字段
【问题讨论】:
-
您需要将
Receipt类中的Vehicles属性设为public virtual ICollection<Vehicles> Vehicles {get; set;}。此外,我建议将嵌套类Vehicles取出到它自己的单独类中。这将使 EF 能够正确计算出更改的详细信息并更新数据库。 -
@VidmantasBlazevicius 将车辆分离到一个单独的类中,将车辆 ID 标记为
[Key][Column(Order=2)],然后将 Receipt 中的属性设置为public virtual ICollection<>仅将车辆表添加到 EF(我没有想要)并且仍然是空的。想要包含每个车辆及其关联的订单的行记录
标签: c# .net entity-framework