结合博客:https://www.cnblogs.com/gosky/p/5751815.html
实例源码:https://download.csdn.net/download/weixin_42401291/10747594
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...,你敢来我就敢做。