Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何打开数据库集的包装<;T>;在编译时作为对象存储而不知道其子类型?_C#_Entity Framework_Reflection_Casting - Fatal编程技术网

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()
方法,而不是通过反射,以正确的方式获取集合。