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...,你敢來我就敢做。