请考虑以下示例:
public override int SaveChanges()
{
foreach (var auditableEntity in ChangeTracker.Entries<ISomething>())
{
if (auditableEntity.State == EntityState.Added)
{
//Create a new instance of the same entity type.
//I don't know which one will be. They just have the same interface.
var newEntity = ?; //???Reflection???
//ISomething known properties.
newEntity.propX = "1";
newEntity.propY = "2";
//Invoke Add method.
??.Add(newEntity);
}
}
return base.SaveChanges();
}
我需要在SaveChanges()
方法中动态创建所有ISomething实体的实例,以便在其上添加新的特定条目。
非常欢迎任何帮助。
此致
答案 0 :(得分:3)
您可以使用非通用DbContext.Set Method (Type)
来获取相应的非通用DbSet
。然后,您可以使用Create
方法创建相同类型的新实例,并使用Add
方法添加它。
这样的事情:
var entityType = auditableEntity.Entity.GetType();
var dbSet = Set(entityType);
var newEntity = (ISomething)dbSet.Create();
//ISomething known properties.
newEntity.propX = "1";
newEntity.propY = "2";
dbSet.Add(newEntity);