我正在使用Entity Framework Core 2.1。我想做的是扩展DbSet
并覆盖Find,以便在实际的DbSet.Find()
调用之前添加我自己的逻辑。
类似这样的东西:
public class ExtendedDbSet<T> : DbSet<T> where T: class
{
public override T Find(params object[] keyValues)
{
// do something here
return base.Find(keyValues);
}
}
但是,当我这样做时,请像这样使用ExtendedDbSet
:
public class SomeContext: DbContext
{
public SomeContext(DbContextOptions<SomeContext> options)
: base(options)
{
}
public ExtendedDbSet<SomeEntity> Entities{ get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeEntity>()
.ToTable("SomeEntity")
.HasKey("ID");
}
}
当我访问SomeContext.Entities
时为空。有些设置没有被调用,但是我不确定它是什么。如果我只是将ExtendedDbSet<T>
更改为DbSet<T>
,SomeContext.Entities
将按照我的预期进行初始化。我在文档中浏览了一些我可以使用的EF生命周期挂钩,但没有看到很多看起来像我需要的东西。我确实尝试在上下文中覆盖DbContext.Set()
,但我什至没有看到它被调用。