Ò»¡¢Ê²Ã´ÊÇEntity
Framework
΢Èí¹Ù·½ÌṩµÄORM¹¤¾ß£¬ORMÈÿª·¢ÈËÔ±½ÚÊ¡Êý¾Ý¿â·ÃÎʵĴúÂëʱ¼ä£¬½«¸ü¶àµÄʱ¼ä·Åµ½ÒµÎñÂß¼²ã´úÂëÉÏ¡£EFÌṩ±ä¸ü¸ú×Ù¡¢Î¨Ò»ÐÔÔ¼Êø¡¢¶èÐÔ¼ÓÔØ¡¢²éѯÊÂÎïµÈ¡£¿ª·¢ÈËԱʹÓÃLinqÓïÑÔ£¬¶ÔÊý¾Ý¿â²Ù×÷Èçͬ²Ù×÷Object¶ÔÏóÒ»Ñùʡʡ£
EFÓÐÈýÖÖʹÓó¡¾°£¬1. ´ÓÊý¾Ý¿âÉú³ÉClass£¬2.ÓÉʵÌåÀàÉú³ÉÊý¾Ý¿â±í½á¹¹£¬3. ͨ¹ýÊý¾Ý¿â¿ÉÊÓ»¯Éè¼ÆÆ÷Éè¼ÆÊý¾Ý¿â£¬Í¬Ê±Éú³ÉʵÌåÀà¡£

O/RMÊÇʲô£¿
ORM Êǽ«Êý¾Ý´æ´¢´ÓÓò¶ÔÏó×Ô¶¯Ó³Éäµ½¹ØÏµÐÍÊý¾Ý¿âµÄ¹¤¾ß¡£ORMÖ÷Òª°üÀ¨3¸ö²¿·Ö£ºÓò¶ÔÏó¡¢¹ØÏµÊý¾Ý¿â¶ÔÏó¡¢Ó³Éä¹ØÏµ¡£ORMʹÀàÌṩ×Ô¶¯»¯CRUD£¬Ê¹¿ª·¢ÈËÔ±´ÓÊý¾Ý¿âAPIºÍSQLÖнâ·Å³öÀ´¡£
¶þ¡¢Entity Framework ¼Ü¹¹

EDM £¨ÊµÌåÊý¾ÝÄ£ÐÍ£©£ºEDM°üÀ¨Èý¸öÄ£ÐÍ£¬¸ÅÄîÄ£ÐÍ¡¢ Ó³ÉäºÍ´æ´¢Ä£ÐÍ¡£
¸ÅÄîÄ£ÐÍ ©U ¸ÅÄîÄ£ÐͰüº¬Ä£ÐÍÀàºÍËüÃÇÖ®¼äµÄ¹ØÏµ¡£¶ÀÁ¢ÓÚÊý¾Ý¿â±íµÄÉè¼Æ¡£
´æ´¢Ä£ÐÍ ©U ´æ´¢Ä£ÐÍÊÇÊý¾Ý¿âÉè¼ÆÄ£ÐÍ£¬°üÀ¨±í¡¢ ÊÓͼ¡¢ ´æ´¢µÄ¹ý³ÌºÍËûÃǵĹØÏµºÍ¼ü¡£
Ó³Éä ©U Ó³Éä°üº¬ÓйØÈçºÎ½«¸ÅÄîÄ£ÐÍÓ³Éäµ½´æ´¢Ä£Ð͵ÄÐÅÏ¢¡£
LINQ to Entities ©U LINQ to Entities ÊÇÒ»ÖÖÓÃÓÚ±àдÕë¶Ô¶ÔÏóÄ£Ð͵IJéѯµÄ²éѯÓïÑÔ¡£Ëü·µ»ØÔÚ¸ÅÄîÄ£ÐÍÖж¨ÒåµÄʵÌå¡£
Entity SQL: Entity SQL ÊÇÁíÒ»ÖÖ¯ÀàËÆÓÚL2EµÄÑÔÓµ«Ïà¸øL2EÒª¸´ÔӵĶ࣬ËùÒÔ¿ª·¢ÈËÔ±²»µÃ²»µ¥¶ÀѧϰËü¡£
Object Services(¶ÔÏó·þÎñ)£ºÊÇÊý¾Ý¿âµÄ·ÃÎÊÈë¿Ú£¬¸ºÔðÊý¾Ý¾ßÌ廯£¬´Ó¿Í»§¶ËʵÌåÊý¾Ýµ½Êý¾Ý¿â¼Ç¼ÒÔ¼°´ÓÊý¾Ý¿â¼Ç¼ºÍʵÌåÊý¾ÝµÄת»»¡£
Entity Client Data Provider£ºÖ÷ÒªÖ°ÔðÊǽ«L2E»òEntity Sqlת»»³ÉÊý¾Ý¿â¿ÉÒÔʶ±ðµÄSql²éѯÓï¾ä£¬ËüʹÓÃAdo.netͨÐÅÏòÊý¾Ý¿â·¢ËÍÊý¾Ý¿É»ñÈ¡Êý¾Ý¡£
ADO.Net Data Provider£ºÊ¹Óñê×¼µÄAdo.netÓëÊý¾Ý¿âͨÐÅ
Èý¡¢Entity FrameworkÔËÐл·¾³
EF5ÓÉÁ½²¿·Ö×é³É£¬EF apiºÍ.net framework 4.0/4.5£¬¶øEF6ÊǶÀÁ¢µÄEntityFramework.dll£¬²»ÒÀÀµ.net
Framework¡£Ê¹ÓÃNuGet¼´¿É°²×°EF¡£


ËÄ¡¢´´½¨ÊµÌåÊý¾ÝÄ£ÐÍ
ʹÓÃÏòµ¼´´½¨ÊµÌåÀ࣬»ò¼üÌí¼Ó£¬Éµ¹ÏʽµÄ~

Ìí¼ÓÍê³ÉÖ®ºó£¬.configÎļþÖлáÌí¼ÓÒÔÏÂÅäÖÃ

Context & Entity Àࣺ
ÿ¸öEntity Data Model Éú³ÉÒ»¸öcontextÀ࣬ÀàÊý¾Ý¿âÿ¸ö±íÉú³ÉÒ»¸öentityÀà¡£ÈçÔÚSchool.edmxÖаüº¬µÄÁ½¸öÖØÒªµÄÎļþ{EDM
Name}.context.ttºÍ{EDM Name}.tt:

School.Context.tt£ºT4Ä£°åÓÃÓÚÉú³ÉµÄcontextÀ࣬¿ÉÒÔ´ÓĿ¼½á¹¹Öп´µ½School.Context.ttϰüº¬Ò»¸öSchool.Context.csÎļþ¡£
School.tt£ºÓÃÓÚÉú³É±íÓ³ÉäµÄʵÌåÀà¡£EntityÀàÊÇPOCOÀà¡£ÈçStudentÉú³É

Î塢ģ°åä¯ÀÀÆ÷
ÒÔSchoolDBΪÀý£¬Çл»µ½Model ViewÊÓͼÏ£¬¿´µ½Ààͼ½á¹¹£º

Áù¡¢DBContext
µÚËĽÚÖÐÌáµ½EDMÉú³ÉSchoolDBEntitiesÀ࣬¸ÃÀà´ÓSystem.Data.Entity.DbContextÀà¼Ì³Ð¡£EntityFramework4.1ÖÐContextÀà´ÓObjectContextÀà¼Ì³Ð¡£DbContextÀàÓëObjectContextÀàËÆ£¬Ëü¶ÔObjcetContextÀà½øÐаü×°¸üÀûÓÚ¿ª·¢µÄÈýÖÖģʽ£ºCodeFirst¡¢Model
First¡¢Database First.
DbContextÊÇEntityFrameworkºÜÖØÒªµÄ²¿·Ö£¬Á¬½ÓÓòÄ£ÐÍÓëÊý¾Ý¿âµÄÇÅÁº£¬ÊÇÓëÊý¾Ý¿âͨÐŵÄÖ÷ÒªÀà¡£

DbContextÖ÷Òª¸ºÔðÒÔÏ»£º
EntitySet:£ºDbContext°üº¬ÁËËùÓÐÓ³Éäµ½±íµÄentities
Querying£º½«Linq-To-EntitiesתÒëΪSql²¢·¢Ë͵½Êý¾Ý¿â
Change Tracking£º´ÓÊý¾Ý¿â»ñÈ¡entitiesºó±£Áô²¢¸ú×ÙʵÌåÊý¾Ý±ä»¯
Persisting Data£º¸ù¾Ýentity״ִ̬ÐÐInsert¡¢update¡¢deleteÃüÁî
Caching£ºDbContextµÄĬÈϵÚÒ»¼¶»º´æ£¬ÔÚÉÏÏÂÎÄÖеÄÉúÃüÖÜÆÚÖд洢entity
Manage Relationship£ºDbContextÔÚDbFirstģʽÖÐʹÓÃCSDL¡¢MSL¡¢SSDL¹ÜÀí¶ÔÏó¹ØÏµ£¬Code
firstÖÐʹÓÃfluent api ¹ÜÀí¹ØÏµ
Object Materialization£ºDbContext½«ÎïÀí±íת³ÉentityʵÀý¶ÔÏó
DEMO
DbContextʵÀý»¯£º

Æß¡¢Entity FrameworkÖеÄEntityÀàÐÍ
POCO Entity (Plain Old CLR Object)£º
²»ÒÀÀµÓÚÈκÎFrameworkµÄÀàµÄÀࣨalso known as persistence-ignorant
objects£©£¬ÎªEntity Data ModelÉú³ÉCRUDÃüÁî·þÎñ¡£

Dynamic Proxy (POCO Proxy):
Dynamic ProxyÊÇÔËÐÐʱPOCOÀàµÄ´úÀíÀ࣬ÀàËÆPOCOÀàµÄ°ü×°¡£Dynamic ProxyÔÊÐíÑÓ³Ù¼ÓÔØ£¨Lazy
loading£©£¬×Ô¶¯¸ú×Ù¸ü¸Ä¡£POCO Entity±ØÐèÂú×ãÒÔϼ¸µã²ÅÄÜתΪPOCO Proxy£º
1. ±ØÐèÉùÃ÷Ϊpublic Àà
2. ²»¿ÉÒÔÊÇsealedÀà
3. ²»¿ÉÒÔÊdzéÏóÀà
4. µ¼º½ÊôÐÔ±ØÐèÊÇpublic,vitual(Entity°üº¬Á½ÖÖÊôÐÔ£¬±êÁ¿ÊôÐÔScalar properties£ºEntity±¾ÉíµÄ×Ö¶ÎÖµ£¬Navigation
properties£ºÆäËüentityµÄÒýÓÃÈç°à¼¶-ѧÉú)
5. ¼¯ºÏÊôÐÔ±ØÐèÊÇ ICollection<T>
6. ProxyCreationEnabled Ñ¡Ïî±ØÐèÊÇtrue

°Ë¡¢Entity Relationships:

¾Å¡¢ Entity Lifecycle
ÔÚÎÒÃÇ×öCRUD²Ù×÷ʱ£¬ÒªÏÈÁ˽âEntityFrameworkÈçºÎ¹ÜÀíʵÌå״̬¡£Ã¿¸öʵÌåµÄÉúÃüÖÜÆÚÄÚ¶¼»áÔÚDbContextÉÏÏÂÎÄÖб£´æÒ»¸ö״̬£¬·Ö±ðÊÇ
Added Deleted Modified Unchanged Detached

Ê®¡¢Code First¡¢DBFirst¡¢Model First
CodeFirst ÁìÓòÉè¼ÆÊ±Ïȶ¨ÒåʵÌåÀ࣬ÓÃʵÌåÀàÉú³ÉÊý¾Ý¿â
DbFirst ´ÓÊý¾Ý¿âÉú³ÉʵÌåÀà
Model First ʹÓÃVisual StudioʵÌåÉè¼ÆÆ÷£¬Éè¼ÆER£¬Í¬Ê±Éú³ÉEntityÀàºÍDB

ʮһ¡¢Ê¹Óòéѯ
ÈýÖÖ²éѯ·½Ê½1) LINQ to Entities, 2) Entity SQL, and 3)
Native SQL
LINQ to Entities£º
LINQ Method syntax:

Entity SQL:

Native SQL:

Ê®¶þ¡¢¸ú×Ù±ä¸üÓë³Ö¾Ã»¯³¡¾°
ÔÚÁ¬½Ó״̬ϳ־û¯ÓëÍÑ»ú״̬ϳ־û¯
Á¬»ú״̬ϳ־û¯£¬ÔÚͬһ¸öDbContextÖв»ÐèÒªÏú»ÙEntity£¬Ö±½ÓдÈëÊý¾Ý¿â

ÍÑ»ú״̬³Ö¾Ã»¯Ö¸¶ÁÈ¡ºÍ±£´æEntityÔÚÁ½¸ö²»Í¬µÄDbContextÖУ¬Context2²»ÖªµÀEntityµÄ¸üÐÂ״̬£¬ËùÒÔ±ØÐè֪ͨContext2µ±Ç°µÄEntity×öÁ˺ÎÖÖ¸üС£

ContextÖ»ÔÚDbSetÉϸú×ÙÌí¼ÓºÍɾ³ý
ÕýÈ·µÄÌí¼ÓºÍɾ³ý

ÒÔÏ´úÂëÔÚListÖÐÌí¼ÓºÍɾ³ý²»Æð×÷Óã¬Ö»ÓиüÉúÓÐЧ

ÍÑ»úʵÌå
ÍÑ»úʵÌå¹ÜÀíÒªÏȸ½¼Óµ½Context


Ìí¼Ó¶à¸ö¹ØÏµÊµÌåʱÓëÌí¼Óµ¥¸öʵÌåÒ»Ñù£¬¸üйØÏµÊµÌåʱÐèÒª¸ú×Ùÿ¸öʵÌåµÄ״̬¡£
Ê®Èý Entity Framework²¢·¢´¦Àí
Ìí¼ÓRowVersion£¬ÀàÐÍΪTimeStamp×ֶΣ¬ÔÚEDMÖÐXÐ޸IJ¢·¢ÊôÐÔΪFixed¡£EF¸üÐÂʵÌåʱ»áÏȼì²éRowVersion£¬Èç¹û·¢ÏÖRowVersion²»Ò»Ö£¬ÔòÅ׳öDbUpdateConcurrencyExceptionÒì³£

Ê®ËÄ Ì°À·¼ÓÔØ¡¢¶èÐÔ¼ÓÔØÓ붨Ïò¼ÓÔØ
̰À·¼ÓÔØ£ºÊ¹ÓÃInclude()£¬×Ô¶¯¼ÓÔØ¹ØÁªÊµÌå

Ö´ÐÐSql

¶èÐÔ¼ÓÔØ£ºÑÓ³Ù¼ÓÔØ¶ÔÏó¹ØÁªµÄʵÌ壬Óõ½Ê±ÔÙ¼ÓÔØ£¬EFĬÈÏΪLazyLoading

¶¨Ïò¼ÓÔØ£ºReference()ºÍCollection() ·½·¨

Ê®Î壺ִÐÐSQL
·µ»ØÊµÌå

Ö´ÐÐSQLÃüÁî

|