EF+Mapper结合使用实现Dto到实体类再到数据的(框架模型基础实现)

25 篇文章 0 订阅
2 篇文章 0 订阅

结合博客: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...,你敢来我就敢做。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧方

开发程序不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值