2016-03-31 2 views
2

Попробуйте создать строку соединения во время выполнения или удалить ее из App.config. Однако я получаю сообщение об ошибке.Установить строку подключения в Runtime - EF Code First

FYI: EF 6 CodeFirst

public class DfDbContext : DbContext 
{ 
    public DfDbContext() 
     : base(GetConnectionString()) 
    { 

    } 


    private static string GetConnectionString() 
    { 
     SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); 
     builder.DataSource = "xxxxx"; 
     builder.InitialCatalog = "xxxx"; 
     builder.UserID = "xxx"; 
     builder.Password = "xxxx"; 
     builder.MultipleActiveResultSets = true; 
     builder.PersistSecurityInfo = true; 
     return builder.ConnectionString.ToString(); 

    } 
} 

Ошибка

Исключение типа 'System.ArgumentException' произошло в System.Data.dll, но не был обработан в пользовательском коде

Дополнительная информация: Ключевое слово не поддерживается: 'initial catalog'.

Любое альтернативное решение?

+0

Источник данных - это имя сервера. InitialCatalog - это база данных на этом сервере. (Для SQL Server.) –

+0

О, это, наверное, так. Из этой строки подключения EF не знает, что вы разговариваете с базой данных SQL Server. Как вы указываете EF, какой тип базы данных вы используете, чтобы он знал, как интерпретировать строку подключения? –

+0

Что произойдет, если вы передадите открытое соединение вместо строки подключения? (Да, я предполагаю, но похоже, что он должен работать.) –

ответ

0

Проблема решена! Настройка фабрики соединений по умолчанию!

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" /> 
    </parameters> 
</defaultConnectionFactory> 

Со следующим DbContext.

public class Model : DbContext 
{ 
    public Model() 
     : base(ConnectionString()) 
    { 
    } 

    public virtual DbSet<MyEntity> MyEntities { get; set; } 

    private static string ConnectionString() 
    { 
     // logic here 
     return "Data Source=(local);Initial Catalog=xx;Integrated Security=False;User ID=sa;Password=xx;MultipleActiveResultSets=True;App=EntityFramework"; 
    } 
} 
+0

Строка соединения, установленная в xml, не читается, а является жестким кодом в функции модели. можно ли использовать тег defaultConnectionFactory в файле app.config? как читать его из кода? –

0

Со ссылкой link. Действительная строка подключения должна быть следующей:

<add name="XXXX" 
    connectionString="Data Source=MONTGOMERY-XXXX;Initial Catalog=XXXX;Integrated Security=True;" 
    providerName="System.Data.SqlClient" /> 

Я думаю, что вы пропустили Провайдер. Попробуйте добавить его и проверьте

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