Я добавил ссылку (пакет NuGet), как описано здесь, но LINQPad не распознает ее.
Вот мой запрос:
Sub Main
Dim iImportList As New List(Of Integer)
Dim oSearch As New List(Of Match)
For i = 1 To 226
iImportList.Add(i)
Next
Using oDb As Db.Context = Db.Context.Create
oSearch.Add(From A In oDb.Applicants
Join C In oDb.Customers On
A.FirstName Equals C.FirstName And
A.LastName Equals C.LastName And
A.Ssn Equals C.Ssn And
A.Dob Equals C.Dob
Where
C.TotalBalance > 0 AndAlso
A.Aln.StartsWith(DateTime.Now.Year) AndAlso
iImportList.Contains(C.ImportId)
Select
New Match With {
.ApplicantId = A.ApplicantId,
.CustomerId = C.CustomerId,
.MatchLevel = Db.Match.MatchLevels.FirstLastSsnDob
})
End Using
End Sub
Class Match
Public Property ApplicantId As Integer
Public Property CustomerId As Integer
Public Property MatchLevel As Db.Match.MatchLevels
End Class
... и вот результат:
Как мы видим, LINQPad игнорирует мою ссылку SQLCE и вместо нее использует ссылку SQL. (Ссылка System.Data
, по-видимому, является внутренней для LINQPad; я не добавлял ее.)
Как я могу заставить LINQPad делать противоположное - игнорировать ссылку SQL и использовать ссылку SQLCE по назначению?
@GertArnold ~ Это имеет смысл, но сборка System.Data.SqlServerCe
находится рядом с Db.dll
, сборкой, которая содержит мой контекст. Приложение отлично работает с Visual Studio или из командной строки. Я не уверен, что еще нужно сделать, чтобы LINQPad перестал использовать System.Data
по умолчанию для создания соединения. (Я использую System.Data.SqlServerCe.SqlCeConnectionStringBuilder
для построения строки.)
Это похоже на проблему разрешения сборки во время выполнения - что-то ожидает, что System.Data.SqlServerCe.dll будет в выходной папке.
Нажмите F4 для просмотра свойств запроса, перейдите на вкладку «Дополнительно» и выберите вариант копирования всех ссылок, не относящихся к платформе, в одну папку. Это гарантирует, что сборки среды выполнения будут доступны для обнаружения.
Боюсь, это не сработало. "copy all non-framework references to a single folder"
Какая это будет папка? Я хочу убедиться, что все скопировано правильно.
Можете ли вы воспроизвести это? Если хотите, могу выслать вам образец проекта.
Нет, воспроизвести не могу. Я не знаю, откуда берется Db.Context. Папку вывода можно найти с помощью запроса типа typeof (somethingInDb.dll).
Хорошо понял. См. Мой комментарий к @erikej выше. Многословие в диалоговом окне свойств подключения подразумевает, что единственная причина указать на файл App.config
- это строка подключения. Но есть и другие необходимые записи конфигурации, независимо от того, создается ли строка подключения во время выполнения или нет.
@JoeAlbahari Согласитесь, путь app.config часто требуется для других записей конфигурации EF6
Просто используйте диалог подключения EF DbContext, чтобы подключить свой DbContext, он работает как шарм.
Простите, надо было еще к своему вопросу добавить скриншот. Это именно то, что я делаю. Я работаю над репро-проектом, скоро он должен быть готов.
Хорошо, я понял это при создании репро-проекта. Я не включил мое местоположение App.config
в свойства соединения LINQPad. Сначала я не думал, что мне нужно, поскольку я создаю строку подключения во время выполнения, но я забыл о других необходимых записях конфигурации там. Как только я добавил местоположение, оно прошло насквозь. Спасибо!
Тип подключения определяется только тем, что происходит в
Db.Context.Create
.