EF4 Создание собственного DbFactoryProvider и других классов Db * - PullRequest
3 голосов
/ 23 августа 2011

Я пытался создать набор пользовательских классов для создания своего собственного провайдера, с которым будет взаимодействовать Entity Framework.Я создал свой пользовательский класс, унаследованный от абстрактного класса DbProviderFactory, и только начал тестирование, чтобы выяснить, могу ли я заставить его общаться с EF, но у меня возникли проблемы.

<configuration>
  <system.data>
    <DbProviderFactories>
      <add name="Custom Data Provider"
           invariant="CustomClient"
           description=".Net Framework Data Provider for Custom"
           type="CustomClient.CustomProviderFactory, CustomClient, 
           Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="AdventureWorksEntities" 
     connectionString="metadata=...;
     provider=CustomClient;
     provider connection string=&quot;data source=.;
     initial catalog=AdventureWorks;integrated security=True;
     multipleactiveresultsets=True;App=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

С моим CustomClient, определенным вышеЯ думал, что будет плавно перейти к совершенству Entity, но когда мой код пытается создать новый объект AdventureWorksEntities, я получаю следующее исключение:

InvalidOperationException Запрошенная реализация .Net Framework Data Provider не имеетПоле экземпляра производного типа System.Data.Common.DbProviderFactory.

При просмотре доступных переопределений для DbProviderFactory не упоминается элемент Instance .Я не совсем уверен, зачем ему это поле, если оно не является частью класса / интерфейса для DbProviderFactory.Является ли исправление таким же простым, как предоставление поля с именем Экземпляр , которое возвращает объект моего пользовательского типа?

1 Ответ

6 голосов
/ 23 августа 2011

Добавьте это к своему провайдеру:

public static readonly CustomProviderFactory Instance = new CustomProviderFactory();

Все фабрики сборки имеют это - они используются как синглтон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...