<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      EF的簡(jiǎn)單認(rèn)識(shí)

      EF的簡(jiǎn)單認(rèn)識(shí)

       

      EF簡(jiǎn)介     

      EntityFramwork是微軟提供的一款ORM框架(Object Relational Mapping),實(shí)體映射模型,它的底層是ADO.NET的機(jī)制,使用EF將省去了我們對(duì)數(shù)據(jù)訪問層的代碼的編寫,省去了對(duì)于SQLHelper等對(duì)數(shù)據(jù)庫的操作邏輯,可以讓我們把更多的時(shí)間放在上層方面的實(shí)現(xiàn)上。只要是操作數(shù)據(jù)的項(xiàng)目都可以使用EF簡(jiǎn)化對(duì)數(shù)據(jù)層的維護(hù),類似的ORM框架還有很多比較輕量級(jí)的框架,此處沒有研究。

      EF的安裝和使用問題

      可以使用從微軟的工具Nuget上直接獲取,在EF的使用使用過程中,可能會(huì)遇到一些錯(cuò)誤,本人在學(xué)習(xí)的時(shí)候就遇到了一些問題。

      1.遇到創(chuàng)建EF數(shù)據(jù)模型文件的時(shí)候,發(fā)現(xiàn)沒有ADO.NET實(shí)體數(shù)據(jù)模型的模板

      解決方法:

      在C:\ProgramData\Package Cache\下面搜索到EFTools.msi

      vs2012對(duì)應(yīng)的是EFTools V11

      vs2013 對(duì)應(yīng)的是EFTools V12

      2.在使用EF6的時(shí)候,遇到編譯錯(cuò)誤

      正在在編譯轉(zhuǎn)換:未能找到元數(shù)據(jù)文件“”%VS120COMNTOOLS..\IDE\EntityFramework.dll%

      解決方案:

      這類問題就是設(shè)置系統(tǒng)的環(huán)境變量VS120COMNTOOLS的設(shè)置的路徑是不正確的,所以需要制定一個(gè)正確的路徑,這個(gè)路徑下一定要包含IDE文件夾,在IDE文件加下,一定要包含著相應(yīng)的dll文件

      我的電腦-右擊屬性-高級(jí)系統(tǒng)設(shè)置-高級(jí)-環(huán)境變量-選擇系統(tǒng)變量中找到這個(gè)變量

      我的正確設(shè)置的路徑是E:\VS2013和Sql安裝文件\VS2013Install\Common7,這個(gè)文件路徑就是我的VS的安裝目錄沒在這個(gè)目錄的下一級(jí)就是IDE,里面已經(jīng)包含著相應(yīng)的Dll文件

      EF的開發(fā)模式

      DataBaseFirst

      下面將使用空的Web演示操作步驟:

      1.首先創(chuàng)建一個(gè)空的web應(yīng)用程序

      2.安裝好以后,點(diǎn)擊添加 數(shù)據(jù)-ADO.NET 實(shí)體模型,文件的后綴名字是model1.edmx,此時(shí)彈出來選擇的類型:從數(shù)據(jù)庫中生成:就是所謂的DataBaseFirst

                        空模型:ModelFirst

      3.然后新建連接選擇對(duì)應(yīng)的數(shù)據(jù)庫和表(對(duì)于敏感數(shù)據(jù)那一項(xiàng)直接打鉤)

      4.完成后會(huì)有幾個(gè)文件添加進(jìn)來

      Model1.tt:T4模板,這個(gè)是代碼生成工具,就是用來生成實(shí)體模型類,微軟的代碼生成工具的后綴名都是.tt

      Model.edmx.diagram:這是和實(shí)體模型設(shè)計(jì)器相對(duì)應(yīng),用來描述模型的。

      。。。

      此時(shí)所有的需選擇出的數(shù)據(jù)庫中的表都已經(jīng)在項(xiàng)目中生成相應(yīng)的model,同時(shí)為我們生成一個(gè)數(shù)據(jù)操作類繼承自DbContext

      代碼語法操作

      添加數(shù)據(jù)

                  Useruser=newUser();

                  user.UserName="zhaohongjian";

                  user.Password="123";

                  AddressListEntitiesdb=newAddressListEntities();//上下文對(duì)象,連接數(shù)據(jù)庫和實(shí)體類

                  db.User.Add(user);

                  //db.User相當(dāng)于一個(gè)內(nèi)存數(shù)據(jù)

                  db.SaveChanges();//存取到數(shù)據(jù)庫中

                  Response.Write(User.ID);//系統(tǒng)中默認(rèn)的返回的是剛剛插入的數(shù)據(jù)的主鍵的ID,也就是說,可以獲取到一些數(shù)據(jù)庫中的信息,因?yàn)橐呀?jīng)SaveChanges()了

       

                 AddressListEntities這個(gè)類是繼承自DbContext類,當(dāng)對(duì)象實(shí)例化的時(shí)候,會(huì)調(diào)用父類的構(gòu)造函數(shù),將連接字符串傳入進(jìn)去。在AddressListEntitie這個(gè)類中存在著

      publicDbSet<User>User { getset; },這個(gè)和數(shù)據(jù)庫中的表示相連接的,也就是不改動(dòng)的話,他們存放的數(shù)據(jù)是一樣

                注意:

            Db.User.Add(user1);

            Db.User.Add(user2);

            Db.SaveChanged();

            多次數(shù)據(jù)庫的操作,但是EF只用操作一次就全部執(zhí)行了,這是集成了工作組模式,大大減少了對(duì)于數(shù)據(jù)操作的頻率,提高性能。同時(shí)SaveChange()方法內(nèi)部實(shí)現(xiàn)了事務(wù)模式,出現(xiàn)失誤會(huì)進(jìn)行回滾操作 

       

       

       

      查詢:

      EF中的查詢采用的是延遲加載的機(jī)制,也就是當(dāng)使用的時(shí)候才會(huì)進(jìn)行查詢操作

      EF中的查詢是支持Linq的

            protectedvoidButton2_Click(object senderEventArgs e)

              {

                  AddressListEntitiesentity=newAddressListEntities();

                  IQueryable<User>resultList=from cell in entity.User

                                                where cell.UserName=="zhaohongjian"

                                                select cell;//因?yàn)橄喈?dāng)于連通器,所以可以直接操作內(nèi)存中的模擬數(shù)據(jù)表,但是此時(shí)并沒有用到相應(yīng)的數(shù)據(jù),所以此時(shí)并沒有查詢數(shù)據(jù)庫

                  Response.Write(resultList.FirstOrDefault<User>().Password);//此時(shí)才會(huì)去查詢數(shù)據(jù)庫

              }

       

      刪除:

                 1.先進(jìn)行查詢出想要?jiǎng)h除的數(shù)據(jù),然后使用刪的API,無法直接構(gòu)建一個(gè)user實(shí)例,直接刪除,因?yàn)樽约褐苯訕?gòu)建的user類實(shí)例,沒有實(shí)現(xiàn)模擬表與數(shù)據(jù)庫中表的映射。

                //先查詢

                  AddressListEntitiesentity=newAddressListEntities();

                  IQueryable<User>resultList=fromcellinentity.User

                                                wherecell.UserName=="zhaohongjian"

                                                selectcell;

                 //再刪除

                  entity.User.Remove(resultList.FirstOrDefault());//這些操作只是在操作的內(nèi)存中的模擬表

                entity.SaveChanges();

                 2.使用自己定義的類的實(shí)例,然后手動(dòng)綁定(Entry

                 Useruser=newUser() { UserName="zhaohongjian" };

                  AddressListEntitiesdbContext=newAddressListEntities();

                  dbContext.Entry<User>(user).State=System.Data.EntityState.Deleted;//手動(dòng)的打上標(biāo)記,在內(nèi)存的模擬表中刪除,同時(shí)實(shí)現(xiàn)與數(shù)據(jù)庫的映射,將user

                  dbContext.SaveChanges();

       

       

      更新:

      對(duì)于更新是沒有對(duì)應(yīng)的直接修改模擬表的Update方法,所以可以使用添加標(biāo)記并刪除模擬表的方式進(jìn)行修改

      具體的使用方式也是有兩種,和刪除的時(shí)候是類似的

      1. 先查詢后更新(使用打標(biāo)記更新)
      2. 自己構(gòu)造然后打標(biāo)記

      AddressListEntitiesdbContext=newAddressListEntities();

                  Useruser=newUser() { UserName="zhaohongjian"Password="ddd" };

                  dbContext.Entry<User>(user).State=EntityState.Modified;

                  dbContext.SaveChanges();

       

      ModelFirst 

      modelFirst的操作就是在創(chuàng)建ADO.NET實(shí)體數(shù)據(jù)模型的時(shí)候,選擇的模板是空模板,此時(shí)將會(huì)直接載入Model1.tt,Model.edmx.diagram,然后直接在實(shí)體操作界面直接進(jìn)行創(chuàng)建就好了,右擊添加實(shí)體模型,然后可以使用右擊-添加標(biāo)量屬性,添加普通的屬性,同時(shí)可以使用F4直接調(diào)出屬性界面,在里面對(duì)屬性進(jìn)行相應(yīng)的設(shè)置,右擊-添加導(dǎo)航屬性,可以構(gòu)建兩個(gè)實(shí)體之間的關(guān)系,實(shí)現(xiàn)一對(duì)多等關(guān)系的映射,導(dǎo)航屬性,可以使得模型之間可以相互調(diào)用。

       

      當(dāng)模型創(chuàng)建完畢之后,然后保存一下,應(yīng)該就會(huì)生成相應(yīng)的model文件(沒顯示出來也是沒有關(guān)系的),然后右擊-根據(jù)模型更新數(shù)據(jù)庫,然后會(huì)生成相應(yīng)的DDL文件

       

      點(diǎn)擊完成之后會(huì)產(chǎn)生xxx.sql文件,你可以直接在VS中執(zhí)行這個(gè)文件,然后會(huì)在數(shù)據(jù)庫生成相應(yīng)的數(shù)據(jù)表,當(dāng)然你可以將sql文件中的省sql語句考到sqlserver中去執(zhí)行即可

      具體的配置已經(jīng)完畢,關(guān)于代碼的使用,跟DataBaseFirst使用是一樣的

      注意事項(xiàng):關(guān)于模型的修改,當(dāng)重新添加一格model的時(shí)候,你需要再次操作根據(jù)模型生成數(shù)據(jù),生成的sql文件一定不要著急的去執(zhí)行,首先需要將前面的Drop語句刪掉,因?yàn)镋F會(huì)將你以前的表全部刪除,然后全部重新生成,所有如果不刪除的話,以前的數(shù)據(jù)將會(huì)丟失。對(duì)于某一個(gè)model中的屬性的修改,直接在數(shù)據(jù)庫中將表改一下,就可以了,沒有必要操作“根據(jù)模型生成數(shù)據(jù)庫”。

       

      CodeFirst

      其實(shí)就是我們用自己搭建代碼的形式,將VS創(chuàng)建的過程完全的模擬出來,代碼基本上都是按照VS自動(dòng)生成的仿照。

      創(chuàng)建相相應(yīng)的codeFirst之前,添加相應(yīng)的類庫

      System.ComponentModel.DataAnnotations.dll(這個(gè)類庫是系統(tǒng)的,用來標(biāo)記特性)

      EntityFramework.dll(添加的EF的package中)

      System.Data.Entity.dll(系統(tǒng))

      1.創(chuàng)建相應(yīng)的實(shí)體類,并對(duì)實(shí)體類添加相應(yīng)的特性

      public  classClass

          {

            [Key]

            publicintId { getset; }

            [Required]

            [StringLength(32)]

            publicstringClassName { getset; }

            publicvirtualICollection<Student>StudentInfo { getset; }

          }

      public   classStudent

          {

             [Key]

              publicintStudentId { getset; }

              [Required]

              [StringLength(32)]

              publicstringStudentName { getset; }

              publicvirtualClassClassInfo { getset; }

          }

      2.配置config文件,主要是將數(shù)據(jù)庫連接字符串添加到配置文件中

      <connectionStrings >

          <add name="connStr" connectionString="server=.;database=mm;uid=****;pwd=****" providerName="System.Data.SqlClient" />

        </connectionStrings>

      3.編寫我們自己的數(shù)據(jù)訪問上下文類,這個(gè)類必須繼承自DbContext

      public   classMyDbContext:DbContext

          {

              publicMyDbContext()

                  : base("name=connStr")

              { }

              protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder)

              {

                //這句代碼的作用就是去除生成的數(shù)據(jù)中的表格是復(fù)數(shù)的形式,保持原來的命名         

                 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

              }

              publicDbSet<Class>Class { getset; }

              publicDbSet<Student>Student { getset; }

      }

      4.就可以直接使用了

      classProgram

          {

              staticvoidMain(string[] args)

              {

                  MyDbContextdbContext=newMyDbContext();

                  Classclass1=newClass { ClassName="趙家班" };

                  dbContext.Database.CreateIfNotExists();

                  dbContext.Class.Add(class1);

                  dbContext.SaveChanges ();

              }

          }

      posted @ 2018-12-27 15:25  獨(dú)孤天狼  閱讀(468)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 欧美大胆老熟妇乱子伦视频| 花莲市| 黄色国产精品一区二区三区| 国产视频一区二区三区视频| 中文字幕在线视频不卡一区二区| 亚洲欧美日韩综合一区在线| 丰满岳乱妇久久久| 少妇办公室好紧好爽再浪一点| 亚洲国产综合精品 在线 一区| 好紧好湿太硬了我太爽了视频| a级亚洲片精品久久久久久久| 国产精品国产三级国产专i| 国产成熟妇女性视频电影| 欧美国产激情18| 女人腿张开让男人桶爽| 日韩美女亚洲性一区二区| 翘臀少妇被扒开屁股日出水爆乳| 欧美精品在线观看视频 | 日韩av中文字幕有码| 日本人成精品视频在线| 临潭县| 九九热免费在线视频观看| 久女女热精品视频在线观看| 韩国精品一区二区三区| 娇妻玩4p被三个男人伺候| 国产美女永久免费无遮挡| 人人爽人人模人人人爽人人爱| 免费观看又色又爽又黄的崩锅| 亚洲夂夂婷婷色拍ww47| 色综合网天天综合色中文| 亚洲高清日韩heyzo| 亚洲国产精品高清久久久| 九九热在线观看视频精品| 性无码一区二区三区在线观看| 亚洲欧洲色图片网站| 国产一区二区丰满熟女人妻| 亚洲区1区3区4区中文字幕码| 这里只有精品在线播放| 日本一区不卡高清更新二区| 榆社县| 国产日本一区二区三区久久|