0

Я изменил строку подключения, чтобы указать на базу данных на удаленном сервере. Но когда я выполняю проект, программа по-прежнему указывает на локальный db.не удалось получить доступ к удаленной базе данных в C#

<entityFramework> 
<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 
</entityFramework> 


<connectionStrings> 
<add name="TEDALS_Ver01.DAL.TedalsContext" 
    connectionString="Data Source=FE0VMC0643\SQLEXPRESS; 
    AttachDbFilename=|DataDirectory|\TeDaLSdev.mdf; 
    Integrated Security=False" 
    providerName="System.Data.SqlClient" 
/> 
<!--<add 
    name="TEDALS_Ver01.DAL.TedalsContext" 
    connectionString="Server=FE0VMC0643; Database=TeDaLSdev; " 
    providerName="System.Data.SqlClient" />--> 

<!--<add name="TEDALS_Ver01.DAL.TedalsContext" 
    providerName="System.Data.SqlClient" 
    connectionString="Server=FE0VMC0643;Data Source=FE0VMC0643; 
    Initial Catalog=TeDaLSdev; 
    Integrated Security=True; 
    Connect Timeout=15; 
    Encrypt=False; 
    TrustServerCertificate=False;" />--> 

</connectionStrings> 

Комментарии - это разные строки подключения, которые у меня есть до сих пор. У меня никогда не было строки соединений, когда я использовал LocalDB.

Конструктор для подключения

public class TedalsContext : DbContext 
{ 
    public TedalsContext() 
     : base("TedalsContext") 
    { 
     //Database.SetInitializer<TedalsContext>(null); 
    } 
} 

я использую SQL Server Express в моей базе данных. Я также попытался изменить имя параметра для base в качестве имени базы данных. Но это ничего не изменило.

Я уже пробовал, если у меня есть доступ к базе данных через SSMS. Я могу создавать таблицы, но я не могу переименовать базу данных как таковую (у меня нет прав доступа для переименования базы данных TeDalSdev).

Есть ли какая-нибудь другая работа вокруг, которую я мог бы попробовать? Должно ли имя удаленной базы данных и локальной базы данных быть одинаковым, чтобы избежать изменения большого количества кода?

UPDATE

Контроллер

public class LsystemFamiliesController : Controller 
{ 
    private TedalsContext db = new TedalsContext(); 
    //Code goes here 
} 
+0

база вызовов с базой ("TEDALS_Ver01.DAL.TedalsContext")? В документации [здесь] (https://msdn.microsoft.com/en-us/data/jj556606.aspx#Connection) говорится, что EF будет получать строку подключения по-разному для кода, а также для созданного конструктора. –

+0

Но независимо , имя, которое вы передаете конструктору DBContext, который должен быть именем строки подключения. Вы передаете только TedalsContext, который, как кажется, не существует в вашем файле конфигурации. –

+0

См. [На этой странице] (https://msdn.microsoft.com/en-us/data/jj592674) тоже –

ответ

4

Я добавил строку соединения с веб-конфигурационный файл одного из моих проектов, и все поля, которые (должны) быть проверены. Это находится в тегах <connectionStrings>. Вам нужно сделать это по умолчанию, и в качестве соединения по умолчанию вы можете иметь только одну строку подключения.

<add name="DefaultConnection" providerName="System.Data.SqlClient" 
    connectionString="Data Source=Providedbyhost;integrated 
    security=false;Initial Catalog=DB_Name;User Id=UserId;Password=password; 
    Trusted_Connection=false; TrustServerCertificate=true; 
    Encrypt=true;MultipleActiveResultSets=True" /> 

Где у вас есть DB Контекст:

public TedalsContext() 
    : base("DefaultConnection") 

переключатель все в DefaultConnection, пока вы не получите это работает, то вы можете сосредоточиться на изменении имен. Прокомментируйте свои локальные строки соединения db. Даже удалите его из проекта, если вам нужно (и сохраните его в другом месте), пока вы его тестируете.

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

enter image description here

Кроме того, этот снимок экрана показывает вам, где для навигации, чтобы проверить строку соединения в пределах VS.

enter image description here

Я предлагаю вам посмотреть здесь:

How to: Access SQL Server Using Windows Integrated Security

What will be the connectionstring for mssql windows authentication

и это:

Connection string using Windows Authentication

Как я и предложил в дискуссии.Я рекомендую также связаться с веб-хостинг-провайдером, так как у меня была эта проблема, когда она не будет подключаться, и это было проблемой на стороне хостинга.

Если вам нужна дополнительная помощь, кричите.

+0

Я использую проверку подлинности Windows. Поэтому я могу пропустить поля имени пользователя и пароля? – Vini

+0

И у меня есть соединение, активное в моем проводнике сервера. Но все же данные, которые извлекаются из локального db. – Vini

+0

А вы используете аутентификацию Windows. Да, это нужно будет изменить. Вам нужно будет указать строку подключения в качестве соединения по умолчанию. и если это не сработает, это связано с тем, что он не был связан в другом месте проекта, но мы можем столкнуться с этим, если это не сработает. –

0

Под конструктором TedalsContext используйте : base(connectionStringName).

В противном случае контекст будет обрабатывать его как первый код и создать TedalContext внутри локальной базы данных SQLExpress.

public class TedalsContext : DbContext 
{ 
    public TedalsContext() 
     : base("TEDALS_Ver01.DAL.TedalsContext") 
    { 
     //Database.SetInitializer<TedalsContext>(null); 
    } 
} 
+0

Я уже пробовал это. Проверьте комментарии в вопросе. @Oguz уже предположил, что .. – Vini

+0

Вы пробовали вставить всю строку соединения в 'base()'? –

+0

есть. Основываясь на другом ответе, теперь я изменил базовое соединение по умолчанию – Vini

Смежные вопросы