0

我有一个DbSet<T>,其中 T 在编译时是未知的,它是从反射给我的。我想解压它并使用非泛型DbSet类中可用的方法。然而:

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

我在这里错过了什么吗?这似乎是个人认为合理的事情

4

2 回答 2

2

使用此方法检索给定类型的集合。

var dbSet = MyContext.Set(MyType);
dbSet.Attach(MyValue);
于 2013-10-13T08:00:48.827 回答
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));
于 2013-10-13T08:12:49.753 回答