8

Dokonuję migracji istniejącej aplikacji sieci Web (przy użyciu Entity Framework 5) do roli sieci Web Azure.Struktura obiektu DbContext w usłudze internetowej Azure

Ciąg połączenia z bazą danych jest przenoszony z web.config do plików ServiceConfiguration.*.cscfg.

Problem polega na tym, że w auto generowanychModel.Context.cs pliku , moja klasa podmiotów jest określona następująco:

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

    // DbSets, etc 
} 

To zawsze będzie szukać MyEntities w web.config. Jak mogę przesłonić ten konstruktor, aby móc przekazać ciąg połączenia z pliku ServiceConfiguration.*.cscfg?

mogę czerpać z tej klasy, tak jak poniżej:

public class MyCloudEntities : MyEntities 
{ 
    public MyCloudEntities() 
     : base(CloudConfigurationManager.GetSetting("MyEntities")) 
    { } 
} 

Ale potem muszę zmienić każdą konkretyzacji MyEntities w bazie kodów oraz przyzwyczajenie zapobiec deweloperów z użyciem MyEntities w przyszłości.

+0

Dlaczego chcesz przechowywać łańcuch połączeń w błękitnym pliku konfiguracyjnym? Czy kiedykolwiek będziesz musiał zmienić łańcuch połączeń w czasie wykonywania? – Fore

+2

Nie, ale ciąg połączenia różni się w zależności od środowiska. – davenewza

Odpowiedz

7

Można zmienić plik Model.Context.tt, aby korzystać

CloudConfigurationManager.GetSetting("MyEntities") 

zamiast

"name=MyEntities" 

dla MyEntities

Więc za każdym razem, gdy kontekst zostanie ponownie utworzony, zawsze będziesz mieć swoje zmiany. W takim przypadku nie musisz zmieniać niczego innego.

+0

Gdzie miałbym to zmienić? Nie mogę zmienić pliku kontekstu, ponieważ jest on generowany automatycznie. Dziękuję za odpowiedź. – davenewza

+1

W prawo, nie można zmienić pliku kontekstowego (Model.Context.cs), ponieważ zostanie on ponownie utworzony, ale plik ten jest generowany z pliku szablonu (Model.Context.tt). Musisz otworzyć plik Model.Context.tt jako zwykły plik tekstowy (VS działa po prostu idealnie) i znaleźć miejsce z 'base (" name = <# = container.Name #> ")', po czym po prostu go zmień do 'base (CloudConfigurationManager.GetSetting (" MyEntities "))', zapisz plik i kliknij prawym przyciskiem myszy w programie Solution Explorer, znajdź element menu "Run Custom Tool" i kliknij go. Model.Context.cs zostanie ponownie utworzony z Twoimi nowymi zmianami. –

+0

Po zmianie szablonu zmiany nie zostaną utracone. –

Powiązane problemy