Přehled entity Frameworku
Entity Framework je sada technologií v ADO.NET, které podporují vývoj softwarových aplikací orientovaných na data. Architekti a vývojáři aplikací orientovaných na data se snažili dosáhnout dvou velmi různých cílů. Musí modelovat entity, vztahy a logiku obchodních problémů, které řeší, a musí také pracovat s datovými moduly používanými k ukládání a načítání dat. Data mohou zahrnovat více systémů úložiště, z nichž každý má vlastní protokoly; dokonce i aplikace, které pracují s jedním systémem úložiště, musí vyrovnávat požadavky systému úložiště s požadavky na zápis efektivního a udržovatelného kódu aplikace.
Entity Framework umožňuje vývojářům pracovat s daty ve formě objektů a vlastností specifických pro doménu, jako jsou zákazníci a adresy zákazníků, aniž by se museli zabývat podkladovými databázovými tabulkami a sloupci, ve kterých jsou tato data uložená. S Entity Framework mohou vývojáři pracovat na vyšší úrovni abstrakce při práci s daty a mohou vytvářet a udržovat aplikace orientované na data s menším kódem než v tradičních aplikacích. Vzhledem k tomu, že Entity Framework je součástí rozhraní .NET Framework, můžou aplikace Entity Framework běžet na libovolném počítači, na kterém je nainstalované rozhraní .NET Framework počínaje verzí 3.5 SP1.
Dejte život modelům
Dlouhodobý a běžný přístup návrhu při vytváření aplikace nebo služby je rozdělení aplikace nebo služby do tří částí: doménový model, logický model a fyzický model. Doménový model definuje entity a relace v systému, který se modeluje. Logický model relační databáze normalizuje entity a relace do tabulek s omezeními cizího klíče. Fyzický model řeší možnosti konkrétního datového modulu zadáním podrobností o úložišti, jako je dělení a indexování.
Fyzický model je zpřesněný správci databází, aby zlepšili výkon, ale programátoři, kteří zapisují kód aplikace, se primárně omezují na práci s logickým modelem tím, že zapisují dotazy SQL a volají uložené procedury. Doménové modely se obecně používají jako nástroj pro zachycení a komunikaci požadavků aplikace, často jako inertované diagramy, které jsou zobrazeny a diskutovány v počátečních fázích projektu a následně opuštěny. Mnoho vývojových týmů přeskočí vytvoření konceptuálního modelu a začne zadáním tabulek, sloupců a klíčů v relační databázi.
Entity Framework poskytuje život modelům tím, že vývojářům umožňuje dotazovat se na entity a vztahy v doménovém modelu (označovaný jako konceptuální model v Entity Frameworku) a zároveň se spoléhat na entity Framework, aby tyto operace přeložily na příkazy specifické pro zdroj dat. To uvolní aplikace z pevně zakódovaných závislostí na konkrétním zdroji dat.
Při práci s Code First se koncepční model mapuje na model úložiště v kódu. Entity Framework může odvodit koncepční model založený na typech objektů a dalších konfiguracích, které definujete. Metadata mapování se generují během běhu na základě kombinace toho, jak jste definovali typy domény a další konfigurační informace, které zadáte v kódu. Entity Framework vygeneruje databázi podle potřeby na základě metadat. Další informace najdete v tématu Vytvoření modelu.
Při práci s nástroji Entity Data Model Tools se koncepční model, model úložiště a mapování mezi nimi vyjadřují ve schématech založených na JAZYCE XML a jsou definovány v souborech, které mají odpovídající přípony názvů:
Koncepční jazyk definice schématu (CSDL) definuje koncepční model. CSDL je implementace entity Data Model Entity Framework. Přípona souboru je .csdl.
Store schema definition language (SSDL) definuje model úložiště, který se také nazývá logický model. Přípona souboru je .ssdl.
Jazyk MSL (Mapping Specification Language) definuje mapování mezi úložištěm a koncepčními modely. Přípona souboru je .msl.
Model úložiště a mapování se můžou podle potřeby měnit bez nutnosti změn koncepčního modelu, datových tříd nebo kódu aplikace. Vzhledem k tomu, že modely úložiště jsou specifické pro poskytovatele, můžete pracovat s konzistentním koncepčním modelem napříč různými zdroji dat.
Entity Framework používá tyto modely a mapovací soubory k vytváření, čtení, aktualizaci a odstraňování operací s entitami a relacemi v koncepčním modelu na ekvivalentní operace ve zdroji dat. Entity Framework dokonce podporuje mapování entit v koncepčním modelu na uložené procedury ve zdroji dat. Další informace naleznete v tématu CSDL, SSDL a MSL specifikace.
Mapování objektů na data
Objektově orientované programování představuje výzvu pro interakci se systémy úložiště dat. I když organizace tříd často zrcadlí uspořádání tabulek relačních databází, fit není ideální. Více normalizovaných tabulek často odpovídá jedné třídě a relace mezi třídami jsou často reprezentovány odlišně než relace mezi tabulkami. Například k reprezentaci zákazníka pro prodejní objednávku Order
může třída použít vlastnost, která obsahuje odkaz na instanci Customer
třídy, zatímco Order
řádek tabulky v databázi obsahuje sloupec cizího klíče (nebo sadu sloupců) s hodnotou, která odpovídá hodnotě primárního klíče v Customer
tabulce. Customer
Třída může mít vlastnost s názvemOrders
, která obsahuje kolekci instancí Order
třídy, zatímco Customer
tabulka v databázi nemá žádný srovnatelný sloupec. Entity Framework poskytuje vývojářům flexibilitu, jak tímto způsobem znázornit relace, nebo přesněji modelovat relace, které jsou reprezentovány v databázi.
Stávající řešení se pokusila tuto mezeru překlenout, což se často označuje jako "neshoda impedance", pouze mapováním objektů orientovaných tříd a vlastností na relační tabulky a sloupce. Místo tohoto tradičního přístupu mapuje Entity Framework relační tabulky, sloupce a omezení cizího klíče v logických modelech na entity a relace v koncepčních modelech. To umožňuje větší flexibilitu při definování objektů a optimalizaci logického modelu. Nástroje Entity Data Model generují rozšiřitelné datové třídy založené na konceptuálním modelu. Tyto třídy jsou částečné třídy, které lze rozšířit o další členy, které vývojář přidá. Ve výchozím nastavení jsou třídy generované pro konkrétní koncepční model odvozeny od základních tříd, které poskytují služby pro materializaci entit jako objektů a pro sledování a ukládání změn. Vývojáři mohou tyto třídy použít k práci s entitami a vztahy jako objekty související s přidruženími. Vývojáři mohou také přizpůsobit třídy, které jsou generovány pro koncepční model. Další informace naleznete v tématu Práce s objekty.
Přístup k datům entit a jejich změna
Více než jen jiné řešení mapování objektově-relační, Entity Framework je v podstatě o tom, jak aplikacím umožnit přístup k datům, která jsou reprezentovaná jako entity a vztahy v konceptuálním modelu. Entity Framework používá informace v modelu a mapovací soubory k překladu dotazů na objekty na typy entit reprezentované v koncepčním modelu do dotazů specifických pro zdroj dat. Výsledky dotazu jsou materializovány do objektů, které entity Framework spravuje. Entity Framework poskytuje následující způsoby dotazování konceptuálního modelu a vrácení objektů:
LINQ to Entities. Poskytuje podporu jazykově integrovaných dotazů (LINQ) pro dotazování typů entit definovaných v konceptuálním modelu. Další informace naleznete v tématu LINQ to Entities.
Entity SQL Dialekt SQL nezávislý na úložišti, který pracuje přímo s entitami v konceptuálním modelu a který podporuje koncepty modelu Entity Data Model. Entity SQL se používá s dotazy na objekty i dotazy, které se spouští pomocí zprostředkovatele EntityClient. Další informace najdete v tématu Přehled entity SQL.
Entity Framework obsahuje zprostředkovatele dat EntityClient. Tento poskytovatel spravuje připojení, převádí dotazy entit na dotazy specifické pro zdroj dat a vrací čtečku dat, kterou Entity Framework používá k materializaci dat entit do objektů. Pokud se nevyžaduje materializace objektů, je možné poskytovatele EntityClient použít také jako standardní ADO.NET zprostředkovatele dat tím, že aplikacím umožníte spouštět dotazy Entity SQL a využívat vrácenou čtečku dat jen pro čtení. Další informace naleznete v tématu EntityClient Provider for the Entity Framework.
Následující diagram znázorňuje architekturu Entity Framework pro přístup k datům:
Nástroje Entity Data Model můžou generovat třídu odvozenou z System.Data.Objects.ObjectContext
kontejneru entit nebo System.Data.Entity.DbContext
představující kontejner entit v konceptuálním modelu. Tento kontext objektu poskytuje možnosti pro sledování změn a správu identit, souběžnosti a vztahů. Tato třída také zveřejňuje metodu SaveChanges
, která do zdroje dat zapisuje vložení, aktualizace a odstranění. Podobně jako dotazy se tyto změny provádějí buď příkazy automaticky vygenerovaným systémem, nebo uloženými procedurami určenými vývojářem.
Poskytovatelé dat
EntityClient
Zprostředkovatel rozšiřuje model poskytovatele ADO.NET přístupem k datům z hlediska konceptuálních entit a relací. Spouští dotazy, které používají Entity SQL. Entity SQL poskytuje základní dotazovací jazyk, který umožňuje EntityClient
komunikaci s databází. Další informace naleznete v tématu EntityClient Provider for the Entity Framework.
Entity Framework obsahuje aktualizovaný Zprostředkovatel dat SqlClient, který podporuje kanonické stromy příkazů. Další informace naleznete v tématu SqlClient pro Entity Framework.
Nástroje datového modelu entit
Spolu s modulem runtime Entity Framework obsahuje Visual Studio nástroje pro mapování a modelování. Další informace naleznete v tématu Modelování a mapování.
Další informace
Další informace o rozhraní Entity Framework najdete tady:
Začínáme – poskytuje informace o tom, jak rychle začít pracovat pomocí rychlého startu, který ukazuje, jak vytvořit jednoduchou aplikaci Entity Framework.
Terminologie Entity Framework – definuje mnoho termínů, které zavádí model Entity Data Model a Entity Framework a které se používají v dokumentaci entity Framework.
Prostředky Entity Framework – poskytuje odkazy na koncepční témata a odkazy na externí témata a zdroje informací pro vytváření aplikací Entity Framework.