Система устанавливает значение по умолчанию свойства класса с типом данных DateTime при обновлении таблицы с помощью EntiyFramework Core. - PullRequest
0 голосов
/ 09 июля 2019

У меня есть следующий класс сущностей, представляющий таблицу: SystemUsers в базе данных.Здесь я использую ядро ​​EntityFramework с пакетом nuget: Microsoft.EntityFrameworkCore.SqlServer (2.1.1)

public partial class SystemUsers
{
    public SystemUsers()
    {
        SystemUserAssociatedCountries = new HashSet<SystemUserAssociatedCountries>();
    }

    public int SystemUserId
    {
        get;
        set;
    }

    public string FirstName
    {
        get;
        set;
    }

    public string LastName
    {
        get;
        set;
    }

    public string Level
    {
        get;
        set;
    }

    public string WorkPhoneNumber
    {
        get;
        set;
    }

    public string MobilePhoneNumber
    {
        get;
        set;
    }

    public string Location
    {
        get;
        set;
    }

    public string Email
    {
        get;
        set;
    }

    public int Role
    {
        get;
        set;
    }

    public TimeSpan? TimeZone
    {
        get;
        set;
    }

    public string CreatedBy
    {
        get;
        set;
    }

    public DateTime CreatedDate
    {
        get;
        set;
    }

    public string UpdatedBy
    {
        get;
        set;
    }

    public DateTime UpdatedDate
    {
        get;
        set;
    }

    public virtual ICollection<SystemUserAssociatedCountries> SystemUserAssociatedCountries
    {
        get;
        set;
    }

Здесь представлен входной класс, предоставляемый клиентскому приложению для отправки данных.

public class UpdateSystemUserCommand : IRequest<UpdateSystemUserCommandResponse>
{
    [Required]
    [Range(0, int.MaxValue, ErrorMessage = "Only positive number allowed")]
    public int SystemUserId
    {
        get;
        set;
    }

    [RegularExpression(Constants.GeneralStringRegularExpression)]
    [Required]
    public string FirstName
    {
        get;
        set;
    }

    [RegularExpression(Constants.GeneralStringRegularExpression)]
    [Required]
    public string LastName
    {
        get;
        set;
    }

    [RegularExpression(Constants.GeneralStringRegularExpression)]
    public string Level
    {
        get;
        set;
    }

    [RegularExpression(Constants.GeneralStringRegularExpression)]
    public string WorkPhoneNumber
    {
        get;
        set;
    }

    [RegularExpression(Constants.GeneralStringRegularExpression)]
    public string MobilePhoneNumber
    {
        get;
        set;
    }

    [RegularExpression(Constants.GeneralStringRegularExpression)]
    [Required]
    public string Location
    {
        get;
        set;
    }

    [Required]
    [EmailAddress(ErrorMessage = "Invalid EmailId")]
    public string Email
    {
        get;
        set;
    }

    [Required]
    public SystemUserRole Role
    {
        get;
        set;
    }

    [Required]
    [Range(0, int.MaxValue, ErrorMessage = "Only positive number allowed")]
    public int HomeCountry
    {
        get;
        set;
    }

    [Required]
    public List<int> Countries
    {
        get;
        set;
    }
}

public class UpdateSystemUserCommandResponse : CommandResponse
{
    [JsonProperty("UpdatedStatus")]
    public string UpdatedStatus
    {
        get;
        set;
    }
}

Я использую Automapper для сопоставления входящих данных с указанным классом сущностей.

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<UpdateSystemUserCommand, SystemUsers>().ForMember(dest => dest.FirstName, source => source.MapFrom(src => src.FirstName)).ForMember(dest => dest.LastName, source => source.MapFrom(src => src.LastName)).ForMember(dest => dest.Level, source => source.MapFrom(src => src.Level)).ForMember(dest => dest.WorkPhoneNumber, source => source.MapFrom(src => src.WorkPhoneNumber)).ForMember(dest => dest.MobilePhoneNumber, source => source.MapFrom(src => src.MobilePhoneNumber)).ForMember(dest => dest.Location, source => source.MapFrom(src => src.Location)).ForMember(dest => dest.Role, source => source.MapFrom(src => Convert.ToInt32(src.Role)));
    }
}

Теперь, пытаясь обновить значения с помощью описанного ниже обработчика, я вижу, что для объекта пользователя установлены значения по умолчанию дляCreatedDate и CreatedBy

public class UpdateUserCommandHandler : IRequestHandler<UpdateSystemUserCommand, UpdateSystemUserCommandResponse>
{
    private readonly IIntegrationEventPublisherServiceService _eventcontext;
    private readonly SystemUserRepository _systemUserRepository;
    private readonly IMapper _mapper;
    public UpdateUserCommandHandler(IIntegrationEventPublisherServiceService eventcontext, IMapper mapper)
    {
        _systemUserRepository = new SystemUserRepository(new TaxatHand_StgContext());
        _eventcontext = eventcontext;
        _mapper = mapper;
    }

    public async Task<UpdateSystemUserCommandResponse> Handle(UpdateSystemUserCommand request, CancellationToken cancellationToken)
    {
      using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
        {
          var userExists = _systemUserRepository.UserExists(request.Email);
            if (!userExists)
            {
                throw new RulesException("email", @"User with email address :" + request.Email + "  does not exists");
            }

            var user = _mapper.Map<SystemUsers>(request);
            user.UpdatedBy = "CMS Admin";
            user.UpdatedDate = DateTime.UtcNow;
            _systemUserRepository.Update(user);
            await _systemUserRepository.UnitOfWork.SaveEntitiesAsync();
        }
    }
}

public partial class TestDBContext : DbContext,IUnitOfWork
{
  public virtual DbSet<SystemUsers> SystemUsers { get; set; }
  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
     modelBuilder.Entity<SystemUsers>(entity =>
            {
                entity.HasKey(e => e.SystemUserId)
                    .HasName("PK_dbo.SystemUsers");

                entity.Property(e => e.CreatedDate).HasColumnType("datetime");

                entity.Property(e => e.UpdatedDate).HasColumnType("datetime");
            });
  }
}

Может кто-нибудь помочь мне узнать, почему он устанавливает значения по умолчанию в этом случае?

...