【发布时间】:2009-04-20 00:47:07
【问题描述】:
如果之前有人问过这个问题,请原谅我;我进行了搜索,但找不到任何具体回答此问题的内容,但我很乐意被推荐。
我正在查看实体框架和 LINQ to SQL,虽然我喜欢这些系统(当然还有 LINQ 集成),但我对数据绑定方面有点怀疑。我已经获取并检查了查询结果,它们似乎没有实现标准的 .NET 列表绑定接口(@987654321@,更重要的是ITypedList),这让我相信将它们绑定到网格(或其他任何东西)将使用反射来获取/设置我的实体属性。这似乎是一个相对昂贵的操作,尤其是当所有代码都生成并且可以实现接口时。
有人对此有任何见解吗?反射是否用于获取/设置属性的值?如果是,这是否会对性能产生明显影响,是否有人知道他们为何选择这条路线?
编辑
我实际上专注于ITypedList 是否在此过程中的某个地方实现,因为它能够提供一种明确的机制来定义和与属性交互而无需诉诸反射。虽然我没有启动 LINQ to SQL 项目,但我确实检查了一个简单的 Entity Framework 实体查询结果,它似乎没有实现ITypedList。有谁知道我是否只是看错了东西,或者如果不是,为什么会这样?
编辑 2
在接受 Marc 的回答后,我认为如果我发布一些用于无缝实现他的解决方案的简单代码,可能对其他人有所帮助。我将以下内容放入我的类的静态构造函数中:
public static ContextName()
{
foreach(Type type in System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes())
{
if (type.GetCustomAttributes(typeof(System.Data.Linq.Mapping
.TableAttribute), true) != null)
{
System.ComponentModel.TypeDescriptor.AddProvider(
new Hyper.ComponentModel.HyperTypeDescriptionProvider(
System.ComponentModel.TypeDescriptor.GetProvider(
type)),
type);
}
}
}
虽然这是针对 LINQ to SQL 的,但我确信可以为实体框架编写等效版本。这将扫描程序集以查找具有 Table 属性的任何类型,并为每个类型添加自定义提供程序。
【问题讨论】:
标签: c# vb.net linq-to-sql entity-framework reflection