Entity framework C#动态类型如何访问某些方法和slef跟踪实体

Entity framework C#动态类型如何访问某些方法和slef跟踪实体,entity-framework,dynamic,self-tracking-entities,Entity Framework,Dynamic,Self Tracking Entities,我使用了dynamic类型,这是.NET4.0中的一个新类型 我想使用动态类型,因为我想使用一些我事先不知道是什么类型的类型,但我知道所有这些可能的类型都有一些常用方法 在我的例子中,我在entity framework 4.0中使用自跟踪实体,我知道所有实体都有标记为xxx的方法(用于设置实体的状态) 通过我创建的动态对象,我可以访问并设置其中一个实体的属性,但是当我尝试执行MarkedAsXXX方法时,我得到一个异常,表示该对象尚未定义该方法 我想知道如何获得这种方法。可能吗 因为我有一个函

我使用了dynamic类型,这是.NET4.0中的一个新类型

我想使用动态类型,因为我想使用一些我事先不知道是什么类型的类型,但我知道所有这些可能的类型都有一些常用方法

在我的例子中,我在entity framework 4.0中使用自跟踪实体,我知道所有实体都有标记为xxx的方法(用于设置实体的状态)

通过我创建的动态对象,我可以访问并设置其中一个实体的属性,但是当我尝试执行MarkedAsXXX方法时,我得到一个异常,表示该对象尚未定义该方法

我想知道如何获得这种方法。可能吗

因为我有一个函数可以访问原始值并将该值设置为当前值,但我需要将实体设置为未设置


谢谢。

如果您为动态生成的类定义了一个接口,那么您可以调用这些方法,而无需进行反射调用

我想使用动态类型,因为我想使用一些我事先不知道是什么类型的类型,但我知道所有这些可能的类型都有一些常用方法

这意味着您应该使用这些常用方法创建一个接口,并使所有相关类型实现该接口

通过我创建的动态对象,我可以访问和设置其中一个实体的属性,但是当我尝试执行MarkedAsXXX方法时,我得到一个异常,表示该对象尚未定义该方法

这可能是由于显式接口实现。如果类型以正常方式将这些方法声明为公共方法,则应该可以

如果您真的想对这些类型使用动态类型,是否有一些基本接口声明MarkedAsXXX方法,您可以在调用这些方法之前将对象强制转换到这些方法?(我不熟悉实体框架,所以不知道这些方法的细节。)


基本上,除非您真的需要,否则我会尽量避免使用动态类型,部分原因是这样的边缘情况-但是如果显式接口实现是原因,那么转换到该接口应该是好的。

我建议使用Change Tracker API。一般来说,如果我有许多类具有相同的方法,我如何使用这种方法?如果我尝试将动态对象强制转换为作为泛型参数发送给该方法的类型,则我无法访问任何方法,只能访问getType、ToString()…@Daimroc:通常,如果有多个类实现相同的方法,则使用一个接口来表示该公共功能。不需要动态键入。通常是的,但在这种情况下,类是自动生成的,它们是自跟踪实体,我不想修改它们。@Daimroc:它们是分部类吗?如果是这样,您可以添加功能(即使它只是声明类实现了一个接口)——我在过去使用过它,效果非常好。