如何在编译时不知道其子类型的情况下解压缩存储为对象的DbSet <t>?</t>

时间:2013-10-13 07:52:01

标签: c# entity-framework reflection casting

我有一个DbSet<T>,其中T在编译时是未知的,这是从Reflection给我的。我想解压缩它并使用非通用DbSet类中可用的方法。但是:

((DbSet)MyDbSetAsObject).Attach(MyValue); //InvalidCastException, can't cast from DbSet<T>to DbSet.

我在这里遗漏了什么吗?这似乎是个人合理的事情

2 个答案:

答案 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));