c# - 字段列表实体框架中的未知列
问题描述
我遇到了这个问题,Visual Studio 调试器会抛出异常
字段列表中的未知列
最近在尝试连接表时发生了这种情况,并且我没有为数据所需的测试用例方法创建关联对象的实例。现在我收到了这个错误,据我所知,不是从加入中得知的。错误是
未知列“u0.ConcurrencyStamp”
在字段列表中,这是服务应该首先在我的用户表上访问的列,没问题。因此,如果是这种情况,我会感觉到 automapper 文件在映射到我发送到前端的对象时只是没有映射并告诉系统此列是此列。
老实说,我认为问题出在此之前,因为我什至还没有到达控制器的映射部分,但是当我实际上从数据库中提取时。这很奇怪,因为所有列在其模型定义中都有其定义的表列名称。
这是我的服务、控制器和映射器配置。以及我的目标带回模型“UserDetailsDto”和我的数据库模型 ApplicationUser
CreateMap<ApplicationUser, UserDetailsDto>()
.ForMember(dest => dest.CompanyName, opts => opts.MapFrom(src => src.Company.Company_Name))
.ForMember(dest => dest.Initials, opts => opts.MapFrom(src =>
String.Concat(
String.IsNullOrEmpty(src.FirstName) ? String.Empty : src.FirstName.Substring(0, 1),
String.IsNullOrEmpty(src.LastName) ? String.Empty : src.LastName.Substring(0, 1)
)
))
.ForMember(dest => dest.FullName, opts => opts.MapFrom(src => src.FirstName + " " + src.LastName))
.ForMember(dest => dest.ExternalUserTypeName, opts => opts.MapFrom(src => src.UserType.TypeName))
.ForMember(dest => dest.ExternalUserTypeId, opts => opts.MapFrom(src => src.UserType.ID))
.ForMember(dest => dest.ConcurrencyStamp, opts => opts.MapFrom(src => src.ConcurrencyStamp));
服务
public async Task<List<ApplicationUser>> GetMostRecentUsers(int numberOfUsers)
{
return await _locationDbContext.Users
.Include(nameof(Company))
.Include(nameof(UserType))
.OrderByDescending(user => user.Created)
.Take(numberOfUsers)
.ToListAsync();
}
控制器
public async Task<IActionResult> GetMostRecentUsers(int numberOfUsers)
{
try
{
if (numberOfUsers < 1)
{
return BadRequest("Please input a number of users to return");
}
var result = await _userService.GetMostRecentUsers(numberOfUsers);
if (result.Count == 0)
{
return NotFound("No users found");
}
var userDtos = _mapper.Map<List<ApplicationUser>, List<UserDetailsDto>>(result);
return Ok(userDtos);
}
catch (Exception ex)
{
_sentry.Log(Constants.Sentry.Error, ex, _settings.Environment);
return CreateCustomErrorResponse(ex.Message);
}
}
目标模型
public class UserDetailsDto
{
public Guid? Id { get; set; }
public DateTime Created { get; set; }
public Guid? CreatedBy { get; set; }
public DateTime Modified { get; set; }
public Guid? ModifiedBy { get; set; }
public Guid CompanyId { get; set; }
public string CompanyName { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public string Title { get; set; }
public string Password { get; set; }
public bool Active { get; set; }
public bool IsInternalUser { get; set; }
public int UserRoleId { get; set; }
public int ExternalUserTypeId { get; set; }
public string ExternalUserTypeName { get; set; }
public string Initials { get; set; }
public string FullName { get; set; }
public string ConcurrencyStamp { get; set; }
public UserDetailsDto()
{
Active = true;
UserRoleId = 1; //1 is the default = no role
ExternalUserTypeId = 1;
}
}
数据库模型
public class ApplicationUser: IdentityUser<Guid>
{
[Column("ID")]
public override Guid Id { get; set; }
[Column("CREATED")]
public DateTime Created { get; set; }
[Column("CREATED_BY")]
public Guid? CreatedBy { get; set; }
[Column("MODIFIED")]
public DateTime Modified { get; set; }
[Column("MODIFIED_BY")]
public Guid? ModifiedBy { get; set; }
[Column("FIRST_NAME")]
public string FirstName { get; set; }
[Column("LAST_NAME")]
public string LastName { get; set; }
[Column("EMAIL")]
public override string Email { get; set; }
[Column("NORMALIZED_EMAIL")]
public override string NormalizedEmail { get; set; }
[Column("EMAIL_CONFIRMED")]
public override bool EmailConfirmed { get; set; }
[Column("USER_NAME")]
public override string UserName { get; set; }
[Column("NORMALIZED_USER_NAME")]
public override string NormalizedUserName { get; set; }
[Column("COMPANY_ID")]
public Guid CompanyId { get; set; }
[Column("PHONE_NUMBER")]
public override string PhoneNumber { get; set; }
[Column("PHONE_NUMBER_CONFIRMED")]
public override bool PhoneNumberConfirmed { get; set; }
[Column("TITLE")]
public string Title { get; set; }
[Column("ACTIVE")]
public bool Active { get; set; }
[Column("INTERNAL_USER")]
public bool IsInternalUser { get; set; }
[Column("ROLE_ID")]
public int UserRoleId { get; set; }
[Column("TYPE_ID")]
[ForeignKey("UserType")]
public int ExternalUserTypeId { get; set; }
[Column("PASSWORD_HASH")]
public override string PasswordHash { get; set; }
[Column("SECURITY_STAMP")]
public override string SecurityStamp { get; set; }
[Column("CONCURRENCY_STAMP")]
public override string ConcurrencyStamp { get; set; }
[Column("TWO_FACTOR_ENABLED")]
public override bool TwoFactorEnabled { get; set; }
[Column("LOCKOUT_END")]
public override DateTimeOffset? LockoutEnd { get; set; }
[Column("LOCKOUT_ENABLED")]
public override bool LockoutEnabled { get; set; }
[Column("ACCESS_FAILED_COUNT")]
public override int AccessFailedCount { get; set; }
public virtual Company Company { get; set; }
public virtual UserType UserType { get; set; }
}
解决方案
推荐阅读
- c++ - 如何从 txt 文件中读取带有竖线管道的数据?
- javascript - 将 JavaScript 链接到 HTML 文件
- sharepoint-online - 调用 SharePoint Online REST API 会返回 ? 而不是变音符号
- python - 如何用python解决服务器-客户端架构中的这个多线程问题?
- c++ - 如何在 C++ 中使用 MPI 对简单循环进行负载平衡
- python - 如何重复使用gtts?
- amazon-web-services - 在 Amazon S3 上递归更改文件扩展名
- html - 如何解决未初始化的常量 Search:: 错误
- java - MapBox Android SDK:如何在应用安装过程中下载离线地图?
- dart - 如何在颤振中降级 rxdart 插件?