如何更改代码,以便使用实体框架将实体动态添加到数据库中



我有一个方法,在该方法中我接收一个对象,该对象由多个属性组成,每个属性都与数据库中的表相关。我目前正在做的是为每个表对象集合使用foreach循环,并将它们添加到我的数据库中。但是,我如何更改此方法,以便能够动态地添加每个对象,而不显式地包括需要添加的每个类型?我正在使用EntityFrameworkCore(5.0.3(。

void Add(RootObject obj)
{
// Entity Framework database context.
DbContext context = new DbContext();

// TypeACollection is a Collection<TypeA> object.
foreach (TypeA a in obj.TypeACollection)
{
// Adds the TypeA object to the DbSet<TypeA> that exists in my database context class.
context.TypeAs.Add(a);
}
foreach (TypeB b in obj.TypeBCollection)
{
context.TypeBs.Add(b);
}

foreach (TypeC c in obj.TypeCCollection)
{
context.TypeCs.Add(a);
}
context.SaveChanges();
}

您可以使用以下通用代码来添加不同类型的实体。

context.Add(object);
context.SaveChanges();

您可以使用AddRange方法

void Add(RootObject obj)
{
// Entity Framework database context.
DbContext context = new DbContext();
context.AddRange(obj.TypeACollection);
context.AddRange(obj.TypeBCollection);
context.AddRange(obj.TypeCCollection);
context.SaveChanges();
}

之所以可以使用context.Add/AddRange而不是context.set.Add/AddRange,是因为它们都做相同的事情。您可以在EFCore源代码(InternalDBSet(中看到这一点。请参见添加方法。

最新更新