1. 程式人生 > >EF+Mapper結合使用實現Dto到實體類再到資料的(框架模型基礎實現)

EF+Mapper結合使用實現Dto到實體類再到資料的(框架模型基礎實現)

1.先配置資料庫:

App.config新增程式碼:

<connectionStrings>     <add name="DEMO" connectionString="Data Source=LENOVO-WEI\WEI;Initial Catalog=MapperTest2;Integrated Security=True;" providerName="System.Data.SqlClient" />   </connectionStrings>

2.引用EF框架包

3.構造上下文(Class3):

using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ConsoleApplication1 {   public   class Class3: DbContext     {         //建構函式         public Class3()             : base("name = DEMO")         {         }

               public DbSet<Class1> Class1 { get; set; }        } }  

/***********************/

主程式碼:

using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using AutoMapper;

namespace ConsoleApplication1 {     class Program     {         static void Main(string[] args)         {

            //Entity與DTO的對映 初始化對映的方向 (註冊)             Mapper.Initialize(x =>             {                 x.CreateMap<Class2, Class1>(); //建立Class2對映到Class1

                x.CreateMap<Class1, Class2>(); //反之             });

            //Dto獲得的資料             Class2 model = new Class2();             model.ID = "sss";//必須提供的值(必填)             model.name = "不57477777";             model.user = "sssxcsdeew7w";             model.sex = "m7sd";             model.replaceTest = "8ds788";

            //對映到實體類表,Dto到Model             Class1 c1 = Mapper.Map<Class2, Class1>(model); //Class2獲得model的值並對映到Class1類中             //  Dto有的欄位與實體類中的欄位名一樣對應傳入,沒有則忽略

            //檢視對映到實體類             string s = c1.ID;             string s1 = c1.name;             string s2 = c1.user;             string s3 = c1.sex;             string s4 = c1.sem;             string s5 = c1.replaceTest;

            ////新建資料庫             //AddSql();

            //新增表資料上下文(獲得那個表的操作)             Class3 dbcontext = new Class3();

            /*******************https://www.cnblogs.com/gosky/p/5751815.html *資料表操作*/             //一下方法必須提供ID

            //增加              dbcontext.Class1.Add(c1);//增加資料(填入)

            //刪除1             //    dbcontext.Entry<Class1>(c1).State = System.Data.Entity.EntityState.Deleted;//刪除資料根據ID刪

            //刪除2             //Attach的實體事先不能已經在記憶體中,否則上下文會追蹤到兩個相同鍵名的實體             //dbcontext.Class1.Attach(c1);//將物件新增到EF管理容器中 ObjectStateManager             //dbcontext.Class1.Remove(c1);//將物件包裝類狀態標識為刪除

            //刪除3(先查後刪)測試失敗             //先載入整個實體 再刪除 執行了2次sql 效率略低              //var user = (from v in dbcontext.Class1             //            where v.ID == "sss"             //            select v).Single();             //dbcontext.Class1.Remove(user);

            //修改1             // dbcontext.Entry<Class1>(c1).State = System.Data.Entity.EntityState.Modified;

            //修改2(指定屬性:name)             //dbcontext.Class1.Attach(c1);             // dbcontext.Entry<Class1>(c1).Property<string>(v => v.name).IsModified = true;

            //查詢每一個             //var users = dbcontext.Class1;             //foreach (var v in users)             //{             //      //dbcontext.Write(v);//列印實體  打印不出

            //    //V能得到值(但是打印不出來各個值)

            //    Console.WriteLine(v);//列印類名             //}

            //查詢單個             //  c1 = dbcontext.Class1.Find("sss");//查詢單個提供ID  、 C1是宣告一個類來接收的

            //執行             dbcontext.SaveChanges();//儲存增加的資料(執行,ID不能重複)

        }

        private static void AddSql()         {

            //建立上下文             Class3 dbcontext = new Class3();             // 建立資料庫             dbcontext.Database.CreateIfNotExists();

            //Console.WriteLine("成功建立資料庫和表");             //Console.ReadKey();         }     } }

/************************************AutoMapper工具的使用  * 本例項主要解決了Dto的資料如何傳輸到實體類中  *   * Dto是UI資料傳輸物件實體類是資料庫儲存物件  *   * 1.在NuGet中安裝AutoMapper程式集工具  *2.引用  *3.先在     Mapper.Initialize(x =>             {                 x.CreateMap<Class2, Class1>(); //建立Class2對映到Class1

                x.CreateMap<Class1, Class2>(); //反之             });  * 註冊對映的方向  *   * 4.從UI傳入值到Dto中  * 5.使用  Class1 c1 = Mapper.Map<Class2, Class1>(model); //Class2獲得model的值並對映到Class1類中  * Mapper.Map方法 將Dto類的值注入實體類中  * 6.使用完  *   * 7.AutoMapper工具其他使用日後補充  */

/********************************************/

1.首先把註釋相應的功能註釋 2.單獨功能不能同時註釋使用(如需要統一使用需要抽方法) 3.Class1為實體類 4.Class2為Dto外部傳輸類 5.Class3為上下文 6.本案例為測試用例 7.為了實現單一功能

8.如需合作加QQ:1174787689 備註合作 9.本人可開發:.Net、資料庫、小程式、網站、App...,你敢來我就敢做。