2016-08-14 4 views
0

Я создал файл EDMX из БД:EF6 строка Изменение соединения во время выполнения

internal partial class LocalBDD : DbContext 
{ 
    public LocalBDD() : base("name=LocalBDD") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

    public virtual DbSet<C__RefactorLog> C__RefactorLog { get; set; } 
} 

Если хранить строку подключения в App.config, это работает отлично, но мне нужно шифровать конфиденциальную информацию, я стараюсь изменить подключение с моего контекста следующим образом:

LocalBDD _localBDD; 
_localBDD = new LocalBDD("my new connStr"); 

Но я получаю

LocalBDD не содержит конструктор т шляпа принимает 1 аргументы

этого кода генерируется с помощью ADO.NET Entity Data Model Assitant, и если я изменить его добавить конструктор, который принимает аргумент 1, когда проект перекомпилировать изменения будут терять.

Как я могу изменить строку подключения моего DbContext во время выполнения?

Заранее спасибо

+0

Возможный дубликат [Entities 'не содержит конструктор, который принимает 1 аргумент] (http://stackoverflow.com/questions/17861570/entities-does-not-contain-a-constructor-that-takes-1- аргументы) –

ответ

2

Я настоятельно рекомендую вам прочитать некоторые основные C# учебники по классам и конструкторам, которые помогут вам понять ошибку вы получаете.

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

public LocalBDD() 
    : base("name=LocalBDD") 
{ 
} 

public LocalBDD(string connectionString) 
    : base(connectionString) 
{ 
} 
+0

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

0

На основании ответа Давида я создал отдельный .cs файл и писал в этом частичном классе, чтобы предотвратить перезапись:

public partial class LocalBDD : DbContext 
{ 
    public LocalBDD(string connetionString) 
     : base(connetionString) 
    { 
    } 
} 

Однако I'm не уверен, что это лучший способ. Спасибо вам обоим.

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