我有一个DbSet<T>
,其中 T 在编译时是未知的,它是从反射给我的。我想解压它并使用非泛型DbSet
类中可用的方法。然而:
((DbSet)MyDbSetAsObject).Attach(MyValue); //InvalidCastException, can't cast from DbSet<T>to DbSet.
我在这里错过了什么吗?这似乎是个人认为合理的事情
我有一个DbSet<T>
,其中 T 在编译时是未知的,它是从反射给我的。我想解压它并使用非泛型DbSet
类中可用的方法。然而:
((DbSet)MyDbSetAsObject).Attach(MyValue); //InvalidCastException, can't cast from DbSet<T>to DbSet.
我在这里错过了什么吗?这似乎是个人认为合理的事情
使用此方法检索给定类型的集合。
var dbSet = MyContext.Set(MyType);
dbSet.Attach(MyValue);
泛型DbSet<>
包含到非泛型的隐式转换DbSet
:
// Summary:
// Returns the equivalent non-generic System.Data.Entity.DbSet object.
//
// Returns:
// The non-generic set object.
[SuppressMessage("Microsoft.Usage", "CA2225:OperatorOverloadsHaveNamedAlternates", Justification = "Intentionally just implicit to reduce API clutter.")]
public static implicit operator DbSet(DbSet<TEntity> entry);
这意味着您可以简单地编写:
DbSet nonGenericSet = myGenericSet;
您也可以尝试(正如@Lorentz Vedeler 已经提出的那样):
DbSet nonGenericSet = this.Set(typeof(myRunTimeEntity));