如何使用automapper将传入数据存储到数据库



我使用的是ASP.NET Core 5和Automapper,据我所知,Automapper是使用节省时间来逐个映射数据(如果我错了,请纠正我(。我的DbContext:中有这些实体类

public class FinLegCheckEntity
{
[Key]
public int Id { get; set; }
public int CustomerId { get; set; } = default!;
public string? CustomerRef { get; set; } = default!;
public int KYClevel { get; set; } = default!;
public List<PlatformKYCLevels> PlatformKycLevels { get; set; } = default!;
public DateTimeOffset Created { get; set; }
public DateTimeOffset Modified { get; set; }
}
public class PlatformKYCLevels
{
[Key]
public int Id { get; set; }
public int Level { get; set; } = default!;
public string MaxAmount { get; set; } = default!;
public string Currency { get; set; } = default!;
}

我基于上面的类构建了我的数据库表,我有模型类,当我从其他服务获取数据时我会使用它,所以我需要映射这两个类:

public class FinLegCheckModel
{
public int Id { get; set; }
public int CustomerId { get; set; } = default!;
public string? CustomerRef { get; set; } = default!;
public int KYClevel { get; set; } = default!;
public List<PlatformKYCLevels> PlatformKycLevels { get; set; } = default!;
public DateTimeOffset Created { get; set; }
public DateTimeOffset Modified { get; set; }
}
public class PlatformKYCLevels
{
public int Id { get; set; }
public int Level { get; set; } = default!;
public string MaxAmount { get; set; } = default!;
public string Currency { get; set; } = default!;
}

我创建了一个配置文件来映射这两个类:

public class FinLegCheckProfile:Profile
{
public FinLegCheckProfile()
{
CreateMap<FinLegCheckEntity,FinLegCheckModel>();
}
}

好吧,我希望到目前为止我的方向是正确的!所以我从外部获取数据,如果数据已经存在于数据库中,我会更新我的数据库,否则我会添加,这是我有问题的地方,我应该如何使用Automapper:

var customerFincheckData = dbContext.FinLegCheckEntities.FirstOrDefault(s => s.CustomerId == fincheckdata.CustomerId);
if (customerFincheckData != null)
{
customerFincheckData.CustomerId = fincheckdata.CustomerId;
customerFincheckData.KYClevel = fincheckdata.KYClevel;
customerFincheckData.PlatformKycLevels = fincheckdata.PlatformKycLevels;
customerFincheckData.CustomerRef = fincheckdata.CustomerRef;
customerFincheckData.Modified = DateTimeOffset.UtcNow;

dbContext.FinLegCheckEntities.Update(customerFincheckData);
dbContext.SaveChanges();
return Task.FromResult(true);
}
else
{
var finlegEntities = new FinLegCheckEntity()
{
CustomerId = fincheckdata.CustomerId,
KYClevel = fincheckdata.KYClevel,
PlatformKycLevels = fincheckdata.PlatformKycLevels,
CustomerRef = fincheckdata.CustomerRef,
Created = DateTimeOffset.UtcNow,
Modified = DateTimeOffset.UtcNow
};
dbContext.FinLegCheckEntities.Add(finlegEntities);
dbContext.SaveChanges();
return Task.FromResult(true);
}

我已经将IMapper注入到类中,并且我可以访问_mapper.Map,但问题是如何在映射后存储或更新数据库?

我认为您不需要任何DTO,因为它与实体类相同。但无论如何,请尝试此代码。你可以在使用之前重新映射你的数据。

public bool AddOrUpdateFinLegCheckEntity (FinLegCheckEntity model)
{
if ( model.CustomerId > 0 )
{
var existedFincheckData = dbContext.FinLegCheckEntities.FirstOrDefault(s => s.CustomerId == model.CustomerId);
if (existedFincheckData != null)
{
model.Modified = DateTimeOffset.UtcNow;

dbContext.Entry(existedFincheckData).CurrentValues.SetValues(model);
} else return false;
}
else
{
model.Created = DateTimeOffset.UtcNow,
model.Modified = DateTimeOffset.UtcNow
dbContext.FinLegCheckEntities.Add(model);
}
dbContext.SaveChanges();
......
return true;
}

最新更新