Entity Framework 4.0, не могу найти имя подключения - PullRequest
1 голос
/ 26 октября 2010

Я пытаюсь запустить модульный тест с N-модулем в проекте. В проекте есть файл .edmx, так что это не многопроектная проблема, которую я вижу у многих людей. Я сохранил все значения по умолчанию от того, что было автоматически сгенерировано инструментом. Мой файл Web.config имеет строку подключения в <connectionStrings>:

<connectionStrings>
<add name="LCFEntities" connectionString="metadata=res://*/LCF.csdl|res://*/LCF.ssdl|res://*/LCF.msl;provider=System.Data.SqlClient;provider connection string='Data Source=xxxxx;Initial Catalog=xxx;Persist Security Info=True;User ID=LCF_admin;Password=xxxx;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient" />
</connectionStrings>

И в LCF.designer.vb он ищет правильное имя:

 ''' <summary>
''' Initializes a new LCFEntities object using the connection string found in the 'LCFEntities' section of the application configuration file.
''' </summary>
Public Sub New()
    MyBase.New("name=LCFEntities", "LCFEntities")
MyBase.ContextOptions.LazyLoadingEnabled = true
    OnContextCreated()
End Sub

И это ошибка в этой строке Dim db As New LCFEntities(). Проект является проектом веб-приложения, и я создал каталог для решения. Не уверен, что это имеет значение.

Ошибка:

The specified named connection is either not found in the configuration, not intended         
to be used with the EntityClient provider, or not valid.

У кого-нибудь есть подсказка?

Edit:

Это тест, который не проходит в строке Dim db as New LCFEntities():

<Test()> _
Public Sub insertTest()
    Dim areaName As String = "Test Category"

    Dim db As New LCFEntities()
    Dim area = db.CreateObject(Of Area)()
    area.DateCreated = Date.Now()
    area.DateModified = Date.Now()
    area.Id = Guid.NewGuid()
    area.LastUpdatedBy = "Jimmy"
    area.CreatedBy = "Jimmy"
    area.Name = areaName
    db.Area.AddObject(area)
    db.SaveChanges()

    Dim categoryExists As Boolean = False

    If (db.Area.Where(Function(x) x.LocalId = area.LocalId).Count > 1) Then
        categoryExists = True
    End If


End Sub

Я могу подтвердить, что мои файлы конфигурации не видны должным образом, я попытался запустить модульный тест, проверяя количество строк подключения в файле конфигурации, он поднялся до 1, когда это должно было быть 3. Встроенный EF так отличается от Linq2SQL? Я написал тесты и отлично их использовал с файлом .dbml, и эти соединения хранятся в конфигурации, почему EF не видны?

Редактировать последние:

Я побежал:

Dim configPath As String = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

, чтобы увидеть мой файл конфигурации, но после просмотра всей информации о настройке у меня есть следующая статистика:

    ApplicationBase "C:\Users\Me\documents\visual studio 2010\Projects\LcmsEfTest\LcmsEfTest\bin"   String
    ApplicationBaseKey  "APPBASE"   String
    ApplicationName "domain-nunit.tdnet.dll"    String
    ApplicationNameKey  "APP_NAME"  String
    ApplicationTrust    Nothing System.Security.Policy.ApplicationTrust
    CachePath   "C:\Users\Me\AppData\Local\Temp\TestDrivenShadowCopy\634238699362254101"    String
    CachePathKey    "CACHE_BASE"    String
    ConfigurationExtension  ".config"   String
    ConfigurationFile   "C:\Users\Me\AppData\Local\Temp\tmp7A01.tmp"    String
    ConfigurationFileInternal   "C:\Users\Me\AppData\Local\Temp\tmp7A01.tmp"    String
    ConfigurationFileKey    "APP_CONFIG_FILE"   String
    DeveloperPath   Nothing String
    DeveloperPathKey    "DEV_PATH"  String
    DisallowAppBaseProbingKey   "DISALLOW_APP_BASE_PROBING" String
    DisallowApplicationBaseProbing  False   Boolean
    DisallowBindingRedirects    False   Boolean
    DisallowBindingRedirectsKey "DISALLOW_APP_REDIRECTS"    String
    DisallowCodeDownload    False   Boolean
    DisallowCodeDownloadKey "CODE_DOWNLOAD_DISABLED"    String
    DisallowPublisherPolicy False   Boolean
    DisallowPublisherPolicyKey  "DISALLOW_APP"  String
    DynamicBase Nothing String
    DynamicBaseKey  "DYNAMIC_BASE"  String
    HostBindingKey  "HOST_CONFIG"   String
    LicenseFile Nothing String
    LoaderOptimization  DomainMask {3}  System.LoaderOptimization
    LoaderOptimizationKey   "LOADER_OPTIMIZATION"   String
    MachineConfigKey    "MACHINE_CONFIG"    String
    PartialTrustVisibleAssemblies   Nothing String()
    PrivateBinPath  Nothing String
    PrivateBinPathEnvironmentVariable   "RELPATH"   String
    PrivateBinPathKey   "PRIVATE_BINPATH"   String
    PrivateBinPathProbe Nothing String
    PrivateBinPathProbeKey  "BINPATH_PROBE_ONLY"    String
    RuntimeConfigurationFile    "config\machine.config" String
    SandboxInterop  False   Boolean
    ShadowCopyDirectories   Nothing String
    ShadowCopyDirectoriesKey    "SHADOW_COPY_DIRS"  String
    ShadowCopyFiles Nothing String
    ShadowCopyFilesKey  "FORCE_CACHE_INSTALL"   String

- значение {длина = 18} строка ()

Теперь я попытался получить эту же информацию из моего проекта Linq2SQL, где он работает нормально, и информация о настройке содержит:

        ApplicationBase "C:\Users\Me\Documents\Visual Studio 2008\Projects\LCFVB\LCFVBTests\bin\Release"    String
    ApplicationName "domain-nunit.tdnet.dll"    String
    ApplicationTrust    Nothing System.Security.Policy.ApplicationTrust
    CachePath   "C:\Users\Me\AppData\Local\Temp\TestDrivenShadowCopy\634238707809841384"    String
    ConfigurationFile   "C:\Users\Me\AppData\Local\Temp\tmp5E19.tmp"    String
    DisallowApplicationBaseProbing  False   Boolean
    DisallowBindingRedirects    False   Boolean
    DisallowCodeDownload    False   Boolean
    DisallowPublisherPolicy False   Boolean
    DynamicBase Nothing String
    LicenseFile Nothing String
    LoaderOptimization  MultiDomainHost {3} System.LoaderOptimization
    PrivateBinPath  Nothing String
    PrivateBinPathProbe Nothing String
    SandboxInterop  False   Boolean
    ShadowCopyDirectories   Nothing String
    ShadowCopyFiles Nothing String

Может ли кто-нибудь увидеть какие-либо различия, которые бы указывали на разницу в том, почему Nunit / тестируемый может читать информацию о моем соединении Linq2SQL в конфигурации, но не для Entity Framework?

Ответы [ 2 ]

3 голосов
/ 26 октября 2010

Это потому, что вы используете NUnit, а NUnit НЕ читает файлы конфигурации! Конечно, когда вы запускаете свои тесты, вы запускаете приложение NUnit , и используется файл конфигурации либо nunit-console.exe.config, либо nunit-gui.exe.config.

Поэтому вам необходимо обновить файл Nunit Config с помощью строки подключения сущности, чтобы Nunit обнаружил его при запуске модульных тестов.

Для получения дополнительной информации посмотрите Как NUnit находит файлы конфигурации .

Вот как вы можете получить путь к активному файлу конфигурации через AppDomainSetup.ConfigurationFile :

<code> string configPath = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
1 голос
/ 26 октября 2010

Попробуйте: add name = "LCFEntities" connectionString = "metadata = res: // *; provider = System.Data.SqlClient; строка подключения провайдера = 'Источник данных = xxxxx; Исходный каталог = xxx; Persist Security Info =True; ID пользователя = LCF_admin; Password = xxxx; MultipleActiveResultSets = True '"providerName =" System.Data.EntityClient "/>

...