我有一个DbSet<T>
,其中T在编译时是未知的,这是从Reflection给我的。我想解压缩它并使用非通用DbSet
类中可用的方法。但是:
((DbSet)MyDbSetAsObject).Attach(MyValue); //InvalidCastException, can't cast from DbSet<T>to DbSet.
我在这里遗漏了什么吗?这似乎是个人合理的事情
答案 0 :(得分:2)
使用此Method检索给定类型的集合。
var dbSet = MyContext.Set(MyType);
dbSet.Attach(MyValue);
答案 1 :(得分:1)
通用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));