使用EntiyFramework Core更新表格时,系统正在设置数据类型为DateTime的类属性的默认值

时间:2019-07-09 20:18:03

标签: c# automapper asp.net-core-2.0 cqrs ef-core-2.0

我有以下表示表的实体类:数据库中的SystemUsers。 在这里,我使用带有nuget包的EntityFramework核心: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");
            });
  }
}

有人可以帮助我知道为什么在这种情况下要设置默认值吗?

0 个答案:

没有答案