C# 如何打开数据库集的包装<;T>;在编译时作为对象存储而不知道其子类型?
我有一个C# 如何打开数据库集的包装<;T>;在编译时作为对象存储而不知道其子类型?,c#,entity-framework,reflection,casting,C#,Entity Framework,Reflection,Casting,我有一个DbSet,其中T在编译时是未知的,它是通过反射提供给我的。我想将其解包,并使用非泛型DbSet类中可用的方法。然而: ((DbSet)MyDbSetAsObject).Attach(MyValue); //InvalidCastException, can't cast from DbSet<T>to DbSet. ((DbSet)MyDbSetAsObject)。附加(MyValue)//InvalidCastException,无法从DbSet向DbSet施放。 我
DbSet
,其中T在编译时是未知的,它是通过反射提供给我的。我想将其解包,并使用非泛型DbSet
类中可用的方法。然而:
((DbSet)MyDbSetAsObject).Attach(MyValue); //InvalidCastException, can't cast from DbSet<T>to DbSet.
((DbSet)MyDbSetAsObject)。附加(MyValue)//InvalidCastException,无法从DbSet向DbSet施放。
我是不是遗漏了什么?这似乎是个人合理的做法使用它来检索给定类型的集合
var dbSet = MyContext.Set(MyType);
dbSet.Attach(MyValue);
使用此选项可检索给定类型的集合
var dbSet = MyContext.Set(MyType);
dbSet.Attach(MyValue);
使用此选项可检索给定类型的集合
var dbSet = MyContext.Set(MyType);
dbSet.Attach(MyValue);
使用此选项可检索给定类型的集合
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);
您也可以尝试(正如@Lorentz Vedeler已经提出的):
通用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);
您也可以尝试(正如@Lorentz Vedeler已经提出的):
通用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);
您也可以尝试(正如@Lorentz Vedeler已经提出的):
通用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);
您也可以尝试(正如@Lorentz Vedeler已经提出的):
我看到了。不幸的是,整个问题源于这样一个事实:我(愚蠢地)从反射(特别是
Property.GetValue(MyContext)
)中获得了MeGenericSet
,这导致了一个对象。因此,隐式演员阵容不可能奏效。我现在通过set()
方法,而不是通过反射,以正确的方式获取集合。我看到了。不幸的是,整个问题源于这样一个事实:我(愚蠢地)从反射(特别是Property.GetValue(MyContext)
)中获得了MeGenericSet
,这导致了一个对象。因此,隐式演员阵容不可能奏效。我现在通过set()
方法,而不是通过反射,以正确的方式获取集合。我看到了。不幸的是,整个问题源于这样一个事实:我(愚蠢地)从反射(特别是Property.GetValue(MyContext)
)中获得了MeGenericSet
,这导致了一个对象。因此,隐式演员阵容不可能奏效。我现在通过set()
方法,而不是通过反射,以正确的方式获取集合。我看到了。不幸的是,整个问题源于这样一个事实:我(愚蠢地)从反射(特别是Property.GetValue(MyContext)
)中获得了MeGenericSet
,这导致了一个对象。因此,隐式演员阵容不可能奏效。我现在通过set()
方法,而不是通过反射,以正确的方式获取集合。