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

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

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

      EF的簡單認識

      EF簡介     

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

      EF的安裝和使用問題

      可以使用從微軟的工具Nuget上直接獲取,在EF的使用使用過程中,可能會遇到一些錯誤,本人在學習的時候就遇到了一些問題。

      1.遇到創建EF數據模型文件的時候,發現沒有ADO.NET實體數據模型的模板

      解決方法:

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

      vs2012對應的是EFTools V11

      vs2013 對應的是EFTools V12

      2.在使用EF6的時候,遇到編譯錯誤

      正在在編譯轉換:未能找到元數據文件“”%VS120COMNTOOLS..\IDE\EntityFramework.dll%

      解決方案:

      這類問題就是設置系統的環境變量VS120COMNTOOLS的設置的路徑是不正確的,所以需要制定一個正確的路徑,這個路徑下一定要包含IDE文件夾,在IDE文件加下,一定要包含著相應的dll文件

      我的電腦-右擊屬性-高級系統設置-高級-環境變量-選擇系統變量中找到這個變量

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

      EF的開發模式

      DataBaseFirst

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

      1.首先創建一個空的web應用程序

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

                        空模型:ModelFirst

      3.然后新建連接選擇對應的數據庫和表(對于敏感數據那一項直接打鉤)

      4.完成后會有幾個文件添加進來

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

      Model.edmx.diagram:這是和實體模型設計器相對應,用來描述模型的。

      。。。

      此時所有的需選擇出的數據庫中的表都已經在項目中生成相應的model,同時為我們生成一個數據操作類繼承自DbContext

      代碼語法操作

      添加數據

                  Useruser=newUser();

                  user.UserName="zhaohongjian";

                  user.Password="123";

                  AddressListEntitiesdb=newAddressListEntities();//上下文對象,連接數據庫和實體類

                  db.User.Add(user);

                  //db.User相當于一個內存數據

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

                  Response.Write(User.ID);//系統中默認的返回的是剛剛插入的數據的主鍵的ID,也就是說,可以獲取到一些數據庫中的信息,因為已經SaveChanges()了

       

                 AddressListEntities這個類是繼承自DbContext類,當對象實例化的時候,會調用父類的構造函數,將連接字符串傳入進去。在AddressListEntitie這個類中存在著

      publicDbSet<User>User { get; set; },這個和數據庫中的表示相連接的,也就是不改動的話,他們存放的數據是一樣

                注意:

            Db.User.Add(user1);

            Db.User.Add(user2);

            Db.SaveChanged();

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

       

       

       

      查詢:

      EF中的查詢采用的是延遲加載的機制,也就是當使用的時候才會進行查詢操作

      EF中的查詢是支持Linq的

            protectedvoidButton2_Click(object sender, EventArgs e)

              {

                  AddressListEntitiesentity=newAddressListEntities();

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

                                                where cell.UserName=="zhaohongjian"

                                                select cell;//因為相當于連通器,所以可以直接操作內存中的模擬數據表,但是此時并沒有用到相應的數據,所以此時并沒有查詢數據庫

                  Response.Write(resultList.FirstOrDefault<User>().Password);//此時才會去查詢數據庫

              }

       

      刪除:

                 1.先進行查詢出想要刪除的數據,然后使用刪的API,無法直接構建一個user實例,直接刪除,因為自己直接構建的user類實例,沒有實現模擬表與數據庫中表的映射。

                //先查詢

                  AddressListEntitiesentity=newAddressListEntities();

                  IQueryable<User>resultList=fromcellinentity.User

                                                wherecell.UserName=="zhaohongjian"

                                                selectcell;

                 //再刪除

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

                entity.SaveChanges();

                 2.使用自己定義的類的實例,然后手動綁定(Entry

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

                  AddressListEntitiesdbContext=newAddressListEntities();

                  dbContext.Entry<User>(user).State=System.Data.EntityState.Deleted;//手動的打上標記,在內存的模擬表中刪除,同時實現與數據庫的映射,將user

                  dbContext.SaveChanges();

       

       

      更新:

      對于更新是沒有對應的直接修改模擬表的Update方法,所以可以使用添加標記并刪除模擬表的方式進行修改

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

      1. 先查詢后更新(使用打標記更新)
      2. 自己構造然后打標記

      AddressListEntitiesdbContext=newAddressListEntities();

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

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

                  dbContext.SaveChanges();

       

      ModelFirst

      modelFirst的操作就是在創建ADO.NET實體數據模型的時候,選擇的模板是空模板,此時將會直接載入Model1.tt,Model.edmx.diagram,然后直接在實體操作界面直接進行創建就好了,右擊添加實體模型,然后可以使用右擊-添加標量屬性,添加普通的屬性,同時可以使用F4直接調出屬性界面,在里面對屬性進行相應的設置,右擊-添加導航屬性,可以構建兩個實體之間的關系,實現一對多等關系的映射,導航屬性,可以使得模型之間可以相互調用。

       

      當模型創建完畢之后,然后保存一下,應該就會生成相應的model文件(沒顯示出來也是沒有關系的),然后右擊-根據模型更新數據庫,然后會生成相應的DDL文件

       

      點擊完成之后會產生xxx.sql文件,你可以直接在VS中執行這個文件,然后會在數據庫生成相應的數據表,當然你可以將sql文件中的省sql語句考到sqlserver中去執行即可

      具體的配置已經完畢,關于代碼的使用,跟DataBaseFirst使用是一樣的

      注意事項:關于模型的修改,當重新添加一格model的時候,你需要再次操作根據模型生成數據,生成的sql文件一定不要著急的去執行,首先需要將前面的Drop語句刪掉,因為EF會將你以前的表全部刪除,然后全部重新生成,所有如果不刪除的話,以前的數據將會丟失。對于某一個model中的屬性的修改,直接在數據庫中將表改一下,就可以了,沒有必要操作“根據模型生成數據庫”。

       

      CodeFirst

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

      創建相相應的codeFirst之前,添加相應的類庫

      System.ComponentModel.DataAnnotations.dll(這個類庫是系統的,用來標記特性)

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

      System.Data.Entity.dll(系統)

      1.創建相應的實體類,并對實體類添加相應的特性

      public  classClass

          {

            [Key]

            publicintId { get; set; }

            [Required]

            [StringLength(32)]

            publicstringClassName { get; set; }

            publicvirtualICollection<Student>StudentInfo { get; set; }

          }

      public   classStudent

          {

             [Key]

              publicintStudentId { get; set; }

              [Required]

              [StringLength(32)]

              publicstringStudentName { get; set; }

              publicvirtualClassClassInfo { get; set; }

          }

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

      <connectionStrings >

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

        </connectionStrings>

      3.編寫我們自己的數據訪問上下文類,這個類必須繼承自DbContext

      public   classMyDbContext:DbContext

          {

              publicMyDbContext()

                  : base("name=connStr")

              { }

              protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder)

              {

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

                 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

              }

              publicDbSet<Class>Class { get; set; }

              publicDbSet<Student>Student { get; set; }

      }

      4.就可以直接使用了

      classProgram

          {

              staticvoidMain(string[] args)

              {

                  MyDbContextdbContext=newMyDbContext();

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

                  dbContext.Database.CreateIfNotExists();

                  dbContext.Class.Add(class1);

                  dbContext.SaveChanges ();

              }

          }

      備注:以上只是自己對EF學習的一點記錄,如有錯誤,歡迎批評指正

       

      posted @ 2017-03-12 17:10  善良的小趙  閱讀(1393)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 四虎成人高清永久免费看| 国产免费一区二区三区在线观看 | 国产又黄又爽又不遮挡视频| 美国又粗又长久久性黄大片| 好男人社区神马在线观看www| 国产精品中文字幕二区| 亚洲国产成人久久精品不卡| 国产亚洲精品第一综合另类| 老鸭窝在线视频| 国产精品户外野外| 久久久精品94久久精品| 伊人久久综合无码成人网| 峨边| 国产一区二区三区综合视频| 亚洲真人无码永久在线| 亚洲中文字幕av无码区| 精品国产一区二区三区性色| 国产办公室秘书无码精品99| 色多多性虎精品无码av| 久久亚洲精品11p| 亚洲欧美高清在线精品一区二区| 日韩精品亚洲专在线电影| 无码中文字幕av免费放| 亚洲国产成人av在线观看| 人妻少妇久久久久久97人妻| 亚洲国产精品一区二区久| 国产精自产拍久久久久久蜜| 午夜福利国产精品小视频| 人妻中文字幕不卡精品| 高清无码午夜福利视频| 日本免费人成视频在线观看| 亚洲高清WWW色好看美女| 黄网站色视频免费观看| 亚洲国产成人精品激情姿源| 日本中文字幕久久网站| 国产AV福利第一精品| 久久老熟妇精品免费观看| 国产一区二区不卡在线| 欧美偷窥清纯综合图区| 九九热在线视频观看精品| 亚洲综合国产一区二区三区|