找出传递给SaveChanges方法的对象类型

时间:2018-05-28 18:02:05

标签: c# entity-framework object

使用实体框架我重写了SaveChanges方法。

但我无法找出一个很好的解决方案来确定对象是否来自我的基类。如果是,我想从基类调用一个方法。

我有像这样的对象

public class BaseClass : EntityData { 
  public void DoSomething() { … }
}
public class B : BaseClass  { … }
public class C : BaseClass  { … }
public class D : EntityData { … }

在我的SaveChanges方法中,我想做类似的事情:

public override int SaveChanges() {
   var changedEntitles = ChangeTracker.Entries().Where
   (_ => _.State == EntityState.Added || _.State == EntityState.Modified);
   foreach (var obj in changedEntitles)  {
       if( "obj is of type baseClass ") {  <---- need some help here
           obj.DoSomething();   <--- and here.
       }
   }
   return base.SaveChanges();
}

我需要B级和B级C应该是:DoSomething(),D类应该被忽略。

希望你能帮助我。

2 个答案:

答案 0 :(得分:1)

我建议您使用is检查其类型,以避免不必要的演员。

if(obj.Entity is BaseClass) {
    ((BaseClass)obj).DoSomething();
}

答案 1 :(得分:0)

as测试实例的类型是否正确。如果是,则返回实例转换为该类型,否则返回null

var bc = obj as BaseClass;
if (bc != null) {
   bc.DoSomething();
}