如何使用嵌套的对象列表使用Entity Framework插入记录?

时间:2018-02-06 16:40:54

标签: c# .net entity-framework

我正在调用一个端点并收回一个对象列表,让我们称之为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以及所需的其他字段

1 个答案:

答案 0 :(得分:0)

由于您的数据库完全空了,而且您的代码也没有显示任何迹象,我担心您的问题的解决方案是实际调用

dbContext.SaveChanges(); 

为了使其真正按预期工作,如评论中所述,您的属性应该是

public virtual ICollection<Vehicles> Vehicles { get; set; }

虽然我不知道这是否有问题,但我建议将您的Vehicle类作为普通的非嵌套类。