Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V této sérii kurzů se dozvíte, jak nasadit (publikovat) projekt ASP.NET webové aplikace, který obsahuje databázi SQL Server Compact pomocí sady Visual Studio 2012 RC nebo Visual Studio Express 2012 RC pro web. Visual Studio 2010 můžete použít také při instalaci aktualizace publikování na webu. Úvod do série najdete v prvním kurzu v této sérii.
Kurz, který ukazuje funkce nasazení zavedené po verzi RC sady Visual Studio 2012, ukazuje, jak nasadit SQL Server edice jiné než SQL Server Compact, a ukazuje, jak nasadit do Azure App Service Web Apps, najdete v tématu nasazení webu ASP.NET pomocí sady Visual Studio.
Přehled
V tomto kurzu se dozvíte, jak nastavit dvě databáze SQL Server Compact a databázový stroj pro nasazení.
Pro přístup k databázi vyžaduje aplikace Contoso University následující software, který musí být nasazen s aplikací, protože není součástí rozhraní .NET Framework:
- SQL Server Compact (databázový stroj).
- ASP.NET Univerzální poskytovatelé (kteří umožňují systému členství ASP.NET používat SQL Server Compact)
- Entity Framework 5.0(Code First s migrací)
Musí být také nasazena struktura databáze a některá (ne všechna) data ve dvou databázích aplikace. Při vývoji aplikace obvykle zadáváte testovací data do databáze, kterou nechcete nasadit na živý web. Můžete ale také zadat některá produkční data, která chcete nasadit. V tomto kurzu nakonfigurujete projekt Contoso University tak, aby byl při nasazení zahrnut požadovaný software a správná data.
Připomenutí: Pokud se vám při procházení kurzu zobrazí chybová zpráva nebo něco nefunguje, nezapomeňte se podívat na stránku pro řešení potíží.
SQL Server Compact versus SQL Server Express
Ukázková aplikace používá SQL Server Compact 4.0. Tento databázový stroj je relativně novou možností pro weby; dřívější verze SQL Server Compact nefungují v hostitelském prostředí webu. SQL Server Compact nabízí několik výhod v porovnání s běžnějším scénářem vývoje s SQL Server Express a nasazením do úplného SQL Server. V závislosti na zvoleném poskytovateli hostingu může být nasazení SQL Server Compact levnější, protože někteří poskytovatelé si účtují další poplatky za podporu úplné SQL Server databáze. Za SQL Server Compact se neúčtují žádné další poplatky, protože jako součást webové aplikace můžete nasadit samotný databázový stroj.
Měli byste ale také vědět o jeho omezeních. SQL Server Compact nepodporuje uložené procedury, triggery, zobrazení ani replikaci. (Úplný seznam funkcí SQL Server, které SQL Server Compact nepodporuje, najdete v tématu Rozdíly mezi SQL Server Compact a SQL Server.) Některé nástroje, které můžete použít k manipulaci se schématy a daty v databázích SQL Server Express a SQL Server, také nefungují s SQL Server Compact. V sadě Visual Studio nemůžete například použít SQL Server Management Studio nebo SQL Server Data Tools s databázemi SQL Server Compact. Máte další možnosti pro práci s databázemi SQL Server Compact:
- V sadě Visual Studio můžete použít Průzkumníka serveru, který nabízí omezené funkce pro manipulaci s databázemi pro SQL Server Compact.
- Můžete použít funkci pro manipulaci s databázemi ve službě WebMatrix, která má více funkcí než Průzkumník serveru.
- Můžete použít poměrně plnohodnotné nástroje třetích stran nebo nástroje open source, jako je SQL Server Compact Toolbox a nástroj pro skripty pro data a schéma SQL Compact.
- Můžete psát a spouštět vlastní skripty DDL (jazyk definice dat) pro manipulaci se schématem databáze.
Můžete začít s SQL Server Compact a později upgradovat podle toho, jak se vaše potřeby budou vyvíjet. Další kurzy v této sérii ukazují, jak migrovat z SQL Server Compact do SQL Server Express a SQL Server. Pokud ale vytváříte novou aplikaci a očekáváte, že v blízké budoucnosti budete potřebovat SQL Server, bude pravděpodobně nejlepší začít SQL Server nebo SQL Server Express.
Konfigurace databázového stroje SQL Server Compact pro nasazení
Software potřebný pro přístup k datům v aplikaci Contoso University byl přidán instalací následujících balíčků NuGet:
- SqlServerCompact
- System.Web.Providers (ASP.NET univerzální poskytovatelé)
- EntityFramework
- EntityFramework.SqlServerCompact
Odkazy odkazují na aktuální verze těchto balíčků, které můžou být novější než ty, které jsou nainstalované v úvodním projektu, který jste si stáhli pro účely tohoto kurzu. Pro nasazení do poskytovatele hostingu se ujistěte, že používáte Entity Framework 5.0 nebo novější. Starší verze Migrace Code First vyžadují úplnou důvěryhodnost a u mnoha poskytovatelů hostingu bude vaše aplikace běžet ve střední důvěryhodnosti. Další informace o střední důvěryhodnosti najdete v kurzu Nasazení do služby IIS jako testovacího prostředí .
Instalace balíčku NuGet se obvykle postará o všechno, co potřebujete k nasazení tohoto softwaru s aplikací. V některých případech to zahrnuje úlohy, jako je změna souboru Web.config a přidání skriptů PowerShellu, které se spouští při každém sestavení řešení. Pokud chcete přidat podporu některé z těchto funkcí (například SQL Server Compact a Entity Framework) bez použití NuGetu, ujistěte se, že víte, co instalace balíčku NuGet dělá, abyste mohli provést stejnou práci ručně.
Existuje jedna výjimka, kdy se NuGet nestará o všechno, co musíte udělat, aby se zajistilo úspěšné nasazení. Balíček NuGet SqlServerCompact přidá do projektu skript po sestavení, který zkopíruje nativní sestavení do podsložek x86 a amd64 ve složce bin projektu, ale skript tyto složky v projektu nezahrnuje. V důsledku toho je nasazení webu nekopíruje na cílový web, pokud je ručně nezahrnete do projektu. (Toto chování je výsledkem výchozí konfigurace nasazení. Další možností, kterou v těchto kurzech nebudete používat, je změnit nastavení, které řídí toto chování. Nastavení, které můžete změnit, je Pouze soubory potřebné ke spuštění aplikace v části Položky k nasazení na kartě Package/Publish Web v okně Vlastnosti projektu . Změna tohoto nastavení se obecně nedoporučuje, protože to může vést k nasazení mnohem více souborů do produkčního prostředí, než je tam potřeba. Další informace o alternativách najdete v kurzu Konfigurace vlastností projektu .)
Sestavte projekt a pak v Průzkumník řešení klikněte na Zobrazit všechny soubory, pokud jste to ještě neudělali. Možná budete muset také kliknout na Aktualizovat.
Rozbalte složku bin , aby se zobrazily složky amd64 a x86 , a pak tyto složky vyberte, klikněte pravým tlačítkem myši a vyberte Zahrnout do projektu.
Ikony složky se změní tak, aby ukazovaly, že složka byla zahrnuta do projektu.
Konfigurace Migrace Code First pro nasazení databáze aplikací
Když nasadíte aplikační databázi, obvykle jednoduše nenasadíte vývojovou databázi se všemi daty v ní do produkčního prostředí, protože většina dat v ní je pravděpodobně jen pro účely testování. Například jména studentů v testovací databázi jsou fiktivní. Na druhou stranu často nemůžete nasadit jenom strukturu databáze, ve které nejsou žádná data. Některá data v testovací databázi můžou být skutečná data a musí tam být, když uživatelé začnou aplikaci používat. Vaše databáze může mít například tabulku, která obsahuje platné hodnoty známek nebo názvy skutečných oddělení.
Pokud chcete simulovat tento běžný scénář, nakonfigurujete metodu Migrace Code First Seed, která vloží do databáze pouze data, která chcete mít v produkčním prostředí. Tato metoda Seed nevloží testovací data, protože se spustí v produkčním prostředí poté, co Code First vytvoří databázi v produkčním prostředí.
V dřívějších verzích Code First před vydáním migrací bylo běžné, že metody Seed vkládají testovací data také, protože při každé změně modelu během vývoje bylo nutné databázi zcela odstranit a znovu vytvořit od začátku. U Migrace Code First se testovací data uchovávají po změnách databáze, takže zahrnutí testovacích dat do metody Seed není nutné. Projekt, který jste stáhli, používá před migrací metodu zahrnutí všech dat do metody Seed třídy inicializátoru. V tomto kurzu zakážete třídu inicializátoru a povolíte migrace. Pak aktualizujete metodu Seed ve třídě konfigurace Migrations tak, aby vkláněla pouze data, která chcete vložit do produkčního prostředí.
Následující diagram znázorňuje schéma databáze aplikace:
V těchto kurzech budete předpokládat, že Student
při prvním nasazení webu by tabulky a Enrollment
měly být prázdné. Ostatní tabulky obsahují data, která musí být předinstalována, když aplikace přejde do provozu.
Vzhledem k tomu, že budete používat Migrace Code First, už nemusíte používat inicializátor DropCreateDatabaseIfModelChanges Code First. Kód tohoto inicializátoru je v souboru SchoolInitializer.cs v projektu ContosoUniversity.DAL. Nastavení v elementu appSettings souboru Web.config způsobí, že se tento inicializátor spustí při každém prvním pokusu aplikace o přístup k databázi:
<appSettings>
<add key="Environment" value="Dev" />
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" value="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity.DAL" />
</appSettings>
Otevřete soubor aplikace Web.config a odeberte element, který určuje třídu inicializátoru Code First z elementu appSettings. Element appSettings teď vypadá takto:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
Poznámka
Dalším způsobem, jak určit třídu inicializátoru, je provést to voláním Database.SetInitializer
Application_Start
metody v souboru Global.asax . Pokud povolujete migrace v projektu, který tuto metodu používá k určení inicializátoru, odeberte tento řádek kódu.
Dále povolte Migrace Code First.
Prvním krokem je zajistit, aby byl projekt ContosoUniversity nastavený jako projekt po spuštění. V Průzkumník řešení klikněte pravým tlačítkem na projekt ContosoUniversity a vyberte Nastavit jako spouštěný projekt. Migrace Code First vyhledá ve spouštěcím projektu připojovací řetězec databáze.
V nabídce Nástroje klikněte na Správce balíčků NuGet a pak na Konzola Správce balíčků.
V horní části okna konzoly Správce balíčků vyberte jako výchozí projekt ContosoUniversity.DAL a pak do příkazového PM>
řádku zadejte "enable-migrations".
Tento příkaz vytvoří soubor Configuration.cs v nové složce Migrations v projektu ContosoUniversity.DAL.
Vybrali jste projekt DAL, protože příkaz "enable-migrations" musí být spuštěn v projektu, který obsahuje třídu kontextu Code First. Pokud je tato třída v projektu knihovny tříd, Migrace Code First hledat připojovací řetězec databáze ve spouštěcím projektu pro řešení. V řešení ContosoUniversity je webový projekt nastavený jako spouštěný projekt. (Pokud jste v sadě Visual Studio nechtěli určit projekt, který má připojovací řetězec, jako spouštěný projekt, můžete ho zadat v příkazu PowerShellu. Syntaxi příkazu enable-migrations zobrazíte zadáním příkazu get-help enable-migrations.)
Otevřete soubor Configuration.cs a nahraďte komentáře v Seed
metodě následujícím kódem:
var instructors = new List<Instructor>
{
new Instructor { FirstMidName = "Kim", LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } },
new Instructor { FirstMidName = "Fadi", LastName = "Fakhouri", HireDate = DateTime.Parse("2002-07-06"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } },
new Instructor { FirstMidName = "Roger", LastName = "Harui", HireDate = DateTime.Parse("1998-07-01"), OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } },
new Instructor { FirstMidName = "Candace", LastName = "Kapoor", HireDate = DateTime.Parse("2001-01-15") },
new Instructor { FirstMidName = "Roger", LastName = "Zheng", HireDate = DateTime.Parse("2004-02-12") }
};
instructors.ForEach(s => context.Instructors.AddOrUpdate(i => i.LastName, s));
context.SaveChanges();
var departments = new List<Department>
{
new Department { Name = "English", Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 1 },
new Department { Name = "Mathematics", Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 2 },
new Department { Name = "Engineering", Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 3 },
new Department { Name = "Economics", Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 4 }
};
departments.ForEach(s => context.Departments.AddOrUpdate(d => d.Name, s));
context.SaveChanges();
var courses = new List<Course>
{
new Course { CourseID = 1050, Title = "Chemistry", Credits = 3, DepartmentID = 3, Instructors = new List<Instructor>() },
new Course { CourseID = 4022, Title = "Microeconomics", Credits = 3, DepartmentID = 4, Instructors = new List<Instructor>() },
new Course { CourseID = 4041, Title = "Macroeconomics", Credits = 3, DepartmentID = 4, Instructors = new List<Instructor>() },
new Course { CourseID = 1045, Title = "Calculus", Credits = 4, DepartmentID = 2, Instructors = new List<Instructor>() },
new Course { CourseID = 3141, Title = "Trigonometry", Credits = 4, DepartmentID = 2, Instructors = new List<Instructor>() },
new Course { CourseID = 2021, Title = "Composition", Credits = 3, DepartmentID = 1, Instructors = new List<Instructor>() },
new Course { CourseID = 2042, Title = "Literature", Credits = 4, DepartmentID = 1, Instructors = new List<Instructor>() }
};
courses.ForEach(s => context.Courses.AddOrUpdate(s));
context.SaveChanges();
courses[0].Instructors.Add(instructors[0]);
courses[0].Instructors.Add(instructors[1]);
courses[1].Instructors.Add(instructors[2]);
courses[2].Instructors.Add(instructors[2]);
courses[3].Instructors.Add(instructors[3]);
courses[4].Instructors.Add(instructors[3]);
courses[5].Instructors.Add(instructors[3]);
courses[6].Instructors.Add(instructors[3]);
context.SaveChanges();
Odkazy mají List
pod sebou červenou using
vlnovku, protože ještě nemáte příkaz pro jejich obor názvů. Klikněte pravým tlačítkem na jednu z instancí nástroje List
, klikněte na Resolve (Vyřešit) a potom klikněte na using System.Collections.Generic (Použít System.Collections.Generic).
Tento výběr nabídky přidá do using
příkazů v horní části souboru následující kód.
using System.Collections.Generic;
Poznámka
Přidání kódu do Seed
metody je jedním z mnoha způsobů, jak můžete vložit pevná data do databáze. Alternativou je přidání kódu do Up
metod a Down
každé třídy migrace. Metody Up
a Down
obsahují kód, který implementuje změny databáze. Jejich příklady najdete v kurzu Nasazení aktualizace databáze .
Můžete také napsat kód, který spouští příkazy SQL pomocí metody .Sql
Pokud jste například do tabulky Department (Oddělení) přidávali sloupec Budget (Rozpočet) a v rámci migrace chcete inicializovat rozpočty všech oddělení na 1 000,00 USD, můžete do Up
metody pro tuto migraci přidat následující řádek kódu:
Sql("UPDATE Department SET Budget = 1000");
Tento příklad uvedený v tomto kurzu používá metodu AddOrUpdate
Seed
v metodě třídy Migrace Code FirstConfiguration
. Migrace Code First volá metodu Seed
po každé migraci a tato metoda aktualizuje řádky, které už byly vloženy, nebo je vloží, pokud ještě neexistují. Metoda AddOrUpdate
nemusí být pro váš scénář tou nejlepší volbou. Další informace najdete v tématu Dejte pozor s EF 4.3 AddOrUpdate Metoda na blogu Julie Lerman.
Stisknutím kombinace kláves CTRL-SHIFT-B sestavte projekt.
Dalším krokem je vytvoření DbMigration
třídy pro počáteční migraci. Chcete, aby tato migrace vytvořila novou databázi, takže musíte odstranit databázi, která už existuje. SQL Server Compact databáze jsou obsažené v souborech .sdf ve složce App_Data. V Průzkumník řešení rozbalte App_Data v projektu ContosoUniversity, abyste viděli dvě SQL Server Compact databáze, které jsou reprezentované soubory .sdf.
Klikněte pravým tlačítkem na soubor School.sdf a klikněte na Odstranit.
V okně Konzola Správce balíčků zadejte příkaz "add-migration Initial", který vytvoří počáteční migraci a pojmenuje ji "Initial".
Migrace Code First ve složce Migrations vytvoří další soubor třídy a tato třída obsahuje kód, který vytvoří schéma databáze.
V konzole Správce balíčků zadáním příkazu update-database vytvořte databázi a spusťte metodu Seed .
(Pokud se zobrazí chyba, která značí, že tabulka již existuje a nelze ji vytvořit, je to pravděpodobně proto, že jste aplikaci spustili po odstranění databáze a před spuštěním update-database
příkazu . V takovém případě soubor School.sdf znovu odstraňte a zkuste update-database
příkaz zopakovat.)
Spusťte aplikaci. Teď je stránka Studenti prázdná, ale stránka Instruktoři obsahuje instruktory. To získáte v produkčním prostředí po nasazení aplikace.
Projekt je teď připravený k nasazení školní databáze.
Vytvoření databáze členství pro nasazení
Aplikace Contoso University používá k ověřování a autorizaci uživatelů systém členství ASP.NET a ověřování pomocí formulářů. Jedna z jeho stránek je přístupná jenom správcům. Pokud chcete zobrazit tuto stránku, spusťte aplikaci a v rozevírací nabídce v části Kurzy vyberte Aktualizovat kredity. Aplikace zobrazí přihlašovací stránku, protože pouze správci mají oprávnění používat stránku Aktualizovat kredity .
Přihlaste se jako "admin" pomocí hesla "Pas$w0rd" (všimněte si čísla nula místo písmene "o" v "w0rd"). Po přihlášení se zobrazí stránka Aktualizovat kredity .
Při prvním nasazení webu je běžné vyloučit většinu nebo všechny uživatelské účty, které vytvoříte pro testování. V takovém případě nasadíte účet správce a žádné uživatelské účty. Místo ručního odstranění testovacích účtů vytvoříte novou databázi členství, která obsahuje pouze jeden uživatelský účet správce, který potřebujete v produkčním prostředí.
Poznámka
V databázi členství se ukládá hodnota hash hesel účtů. Abyste mohli nasazovat účty z jednoho počítače na jiný, musíte zajistit, aby rutiny hash negenerovaly jiné hodnoty hash na cílovém serveru než na zdrojovém počítači. Při použití ASP.NET Universal Providers budou generovat stejné hodnoty hash, pokud nezměníte výchozí algoritmus. Výchozí algoritmus je HMACSHA256 a je zadaný v ověřovacím atributu elementu machineKey v souboru Web.config.
Databáze členství není udržována Migrace Code First a neexistuje žádný automatický inicializátor, který by databázi sesadil do testovacích účtů (jako je tomu u školní databáze). Pokud tedy chcete mít testovací data k dispozici, před vytvořením nové databáze vytvoříte kopii testovací databáze.
V Průzkumník řešení přejmenujte soubor aspnet.sdf ve složce App_Data na aspnet-Dev.sdf. (Nevytvávejte kopii, jednoduše ji přejmenujte – za chvíli vytvoříte novou databázi.)
V Průzkumník řešení se ujistěte, že je vybraný webový projekt (ContosoUniversity, ne ContosoUniversity.DAL). Potom v nabídce Projekt vyberte ASP.NET Konfigurace a spusťte Nástroj pro správu webu (WAT).
Vyberte kartu Zabezpečení .
Klikněte na Vytvořit nebo spravovat role a přidejte roli správce .
Vraťte se na kartu Zabezpečení , klikněte na Vytvořit uživatele a přidejte uživatele "admin" jako správce. Než kliknete na tlačítko Vytvořit uživatele na stránce Vytvořit uživatele , nezapomeňte zaškrtnout políčko Správce . Heslo použité v tomto kurzu je "Pas$w0rd" a můžete zadat libovolnou e-mailovou adresu.
Zavřete prohlížeč. V Průzkumník řešení kliknutím na tlačítko aktualizovat zobrazíte nový soubor aspnet.sdf.
Klikněte pravým tlačítkem na aspnet.sdf a vyberte Zahrnout do projektu.
Odlišení vývoje od produkčních databází
V této části přejmenujete databáze tak, aby vývojové verze byly School-Dev.sdf a aspnet-Dev.sdf a produkční verze byly School-Prod.sdf a aspnet-Prod.sdf. Není to nutné, ale když to uděláte, pomůže vám to zabránit tomu, abyste si testovací a produkční verze databází zaměnili.
V Průzkumník řešení klikněte na Aktualizovat a rozbalte složku App_Data. Zobrazí se školní databáze, kterou jste vytvořili dříve. Klikněte na ni pravým tlačítkem a vyberte Zahrnout do projektu.
Přejmenujte aspnet.sdf na aspnet-Prod.sdf.
Přejmenujte School.sdf na School-Dev.sdf.
Při spuštění aplikace v sadě Visual Studio nechcete používat verze -Prod databázových souborů, ale - Dev versions. Proto musíte změnit připojovací řetězce v souboru Web.config tak, aby odkazovaly na verze -Dev databází. (Nevytvořili jste soubor School-Prod.sdf, ale je to v pořádku, protože Code First vytvoří tuto databázi v produkčním prostředí při prvním spuštění aplikace.)
Otevřete soubor aplikace Web.config a vyhledejte připojovací řetězce:
<configuration>
<!-- Settings -->
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet.sdf" providerName="System.Data.SqlServerCe.4.0" />
<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
<!-- Settings -->
</configuration>
Změňte aspnet.sdf na aspnet-Dev.sdf a změňte School.sdf na School-Dev.sdf:
<configuration>
<!-- Settings -->
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet-Dev.sdf" providerName="System.Data.SqlServerCe.4.0" />
<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School-Dev.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
<!-- Settings -->
</configuration>
SQL Server Compact databázový stroj a obě databáze jsou teď připravené k nasazení. V následujícím kurzu nastavíte automatické transformaceWeb.config souborů pro nastavení, která se musí lišit ve vývojovém, testovacím a produkčním prostředí. (Mezi nastavení, která je potřeba změnit, patří připojovací řetězce, ale tyto změny nastavíte později při vytváření profilu publikování.)
Další informace
Další informace o NuGetu najdete v tématech Správa knihoven projektů pomocí NuGetu a Dokumentace k NuGetu. Pokud nechcete používat NuGet, budete se muset naučit analyzovat balíček NuGet, abyste zjistili, co dělá při instalaci. (Může například nakonfigurovat transformaceWeb.config , nakonfigurovat skripty PowerShellu tak, aby se spouštěly v době sestavení atd.) Další informace o tom, jak NuGet funguje, najdete zejména v tématu Vytvoření a publikování balíčků a konfiguračních souborů a transformací zdrojového kódu.