Простите, если об этом уже спрашивали; Я выполнил поиск, но не смог найти ничего, что конкретно ответило бы на этот вопрос, но я был бы рад, если бы меня направили.
Я взгляну на Entity Framework и LINQ to SQL, и хотя мне нравятся системы (и, конечно, интеграция LINQ), я немного скептически отношусь к аспекту привязки данных. Я взял результаты запросов и проверил их, и они, кажется, не реализуют стандартные интерфейсы привязки списков .NET (IBindingList
, и что более важно ITypedList
), что наводит меня на мысль, что они связываются с сеткой ( или что-нибудь еще) собирается использовать отражение, чтобы получить / установить свойства моей сущности. Это кажется сравнительно дорогой операцией, особенно когда весь код генерируется в любом случае и может реализовывать интерфейсы.
У кого-нибудь есть понимание этого? Используется ли отражение для получения / установки значения свойств? Если да, оказывает ли это заметное влияние на производительность, и есть ли у кого-нибудь идеи, почему они пошли по этому пути?
Редактировать
На самом деле я концентрируюсь на том, реализован ли ITypedList
где-нибудь по пути, поскольку именно он обладает способностью предоставить явный механизм для определения и взаимодействия со свойствами без обращения к отражению. Хотя у меня не было проекта LINQ to SQL, я проверил простой результат запроса сущности Entity Framework, и он, по-видимому, не реализовал ITypedList
. Кто-нибудь знает, если я просто смотрю на что-то неправильно, или если нет, то почему это так?
Редактировать 2
Приняв ответ Марка, я подумал, что для других было бы полезно, если бы я опубликовал какой-то простой код, который использовал для бесшовной реализации его решения. Я поместил следующее в статический конструктор для моего класса:
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, я уверен, что для Entity Framework может быть написана эквивалентная версия. Это отсканирует сборку для любых типов с атрибутом Table
и добавит настраиваемый поставщик для каждого из них.