dnc(.Net core/Dot Net Core) 中使用automapper

最近在学习架构方面的知识,顺便先写一个基于dnc(.Net core/Dot Net Core)的单体架构.有用到Automapper,先记录一下
一.安装Nuget包:
1. AutoMapper
2. AutoMapper.Extensions.Microsoft.DependencyInjection
二.创建AutoMapper的profile类

public class MyProfile:Profile
{
    public MyProfile()
    {
        CreateMap<SysUser, SysUserDTO>();
        CreateMap<Advance, AdvanceDTO>();
    }
}

三.StartUp类中配置Automapper
1.如果使用单个profile类,在ConfigureServices方法中加入:

services.AddAutoMapper(config =>
{
    config.AddProfile<MyProfile>();
});

2.如果使用多个profile类或者profile在不同的项目中,则加入如下:

services.AddAutoMapper(config =>
{
    var types = Assembly
                    .GetEntryAssembly()
                    .GetReferencedAssemblies()
                    .Select(Assembly.Load)
                    .SelectMany(y => y.DefinedTypes)
                    .Where(type => typeof(Profile).GetTypeInfo().IsAssignableFrom(type.AsType())
                    && type.FullName.ToUpper().StartsWith("CHCMS")
                    && type.BaseType.Equals(typeof(Profile)));//CHCMS是我的项目命名空间开头部分,请修改为你项目的对应命名空间开头部分.
    var typeList = new List<Type>();
    foreach (var ti in types)
    {
        var type = ti.AsType();
        typeList.Add(type);
    }
    config.AddProfiles(typeList);
});

四.开始使用

var user = _dbContext.SysUser.Where(x => x.UserName.Equals(userName)).FirstOrDefault();
var userDto = Mapper.Map<SysUserDTO>(user);

.net coe 类库中使用ef core遇到的问题

1.提示”dotnet-ef未知命令”:
在csproj文件中新增itemgroup,加入如下:

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />

2.dotnet ef migrations add xxx 时提示如下信息
The specified framework version ‘2.0’ could not be parsed
The specified framework ‘Microsoft.NETCore.App’, version ‘2.0’ was not found.
– Check application dependencies and target a framework version installed at:
\
– Alternatively, install the framework version ‘2.0’.
此信息的错误原因为未指定runtime版本号. 在 节点下加入如下:

<RuntimeFrameworkVersion>2.0.3</RuntimeFrameworkVersion>

版本号试项目而定
3. dotnet ef migrations add xxx时提示如下错误:
Unable to create an object of type ‘xxxDbContext’. Add an implementation of ‘IDesignTimeDbContextFactory‘ to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time.
此错误为,没有找到dbcontext的初始化信息,未指定所用数据库以及数据库链接字符串.
解决此问题需要在项目中 dbcontext同目录下增加 IDesignTimeDbContextFactory 接口的实现类

    public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CHCmsDbContext>

    {
       

        public CHCmsDbContext CreateDbContext(string[] args)

        {

            var builder = new DbContextOptionsBuilder<CHCmsDbContext>();
           
            builder.UseMySql("Server=localhost;User=chcms;Password=123456;DataBase=CHCms;");

            return new CHCmsDbContext(builder.Options);

        }

    }