Как избежать сохранения значения свойства объекта формы при сохранении изменений в БД - PullRequest
0 голосов
/ 15 июня 2019

В веб-приложении crud asp.net core 2.2 мне нужно избегать сохранения свойства объекта формы в db. Как мне это сделать?

Я пытался использовать аннотацию данных [Editable (false)] в свойстве ListBin, чтобы предотвратить сохранение значения свойства в db.

[Table("supply_lists")]
public partial class SupplyLists
{
    [Column("id")]
    public int Id { get; set; }
    [Column("category_id")]
    public int CategoryId { get; set; }
    [Required]
    [Column("coursecode")]
    [StringLength(200)]
    public string Coursecode { get; set; }
    [Required]
    [Column("title")]
    [StringLength(200)]
    public string Title { get; set; }
    [Required]
    [Column("filename")]
    [StringLength(200)]
    public string Filename { get; set; }
    [Column("isactive")]
    public bool Isactive { get; set; }
    [Column("date", TypeName = "smalldatetime")]
    public DateTime Date { get; set; }

    [Column("list_bin")]
    public byte[] ListBin { get; set; }

    [ForeignKey("CategoryId")]
    [InverseProperty("SupplyLists")]
    public virtual SupplyListCategory Category { get; set; }
}


[ModelMetadataType(typeof(MetaDataTypeModel))]
public partial class SupplyLists
{

}
public class MetaDataTypeModel
{
    [Editable(false)]
    public byte[] ListBin { get; set; }

    [Display(Name = "Is Active")]
    public bool Isactive { get; set; }

    [Display(Name ="Course Code")]
    public string Coursecode { get; set; }

    [Display(Name = "Category")]
    public int CategoryId { get; set; }

    [DataType(DataType.Date)]
    public DateTime Date { get; set; }
}

public class EditModel : PageModel
{
    private readonly SupplyListCore22.Models.SupplyListsContext _context;
    private readonly IHostingEnvironment _env;

    public EditModel(SupplyListCore22.Models.SupplyListsContext context, IHostingEnvironment env)
    {
        _context = context;
        _env = env;
    }

    [BindProperty]
    public SupplyLists SupplyLists { get; set; }
    [BindProperty]
    public FileUpload FileUpload { get; set; }

    public async Task<IActionResult> OnGetAsync(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        SupplyLists = await _context.SupplyLists
            .Include(s => s.Category).FirstOrDefaultAsync(m => m.Id == id);

        if (SupplyLists == null)
        {
            return NotFound();
        }
       ViewData["CategoryId"] = new SelectList(_context.SupplyListCategory, "Id", "Category");
        return Page();
    }

    public async Task<IActionResult> OnPostAsync()
    {
        //if (!ModelState.IsValid)
        //{
        //    return Page();
        //}

        _context.Attach(SupplyLists).State = EntityState.Modified;
        await _context.SaveChangesAsync();

        if (FileUpload.UploadSupplyList != null)
        {
            var fileUploadData = await utilities.utilities.ProcessFormFile(FileUpload.UploadSupplyList, ModelState);
            if (ModelState.ErrorCount > 0)
            {
                ViewData["CategoryId"] = new SelectList(_context.SupplyListCategory, "Id", "Category");
                return Page();
            }
            var sl = _context.SupplyLists.Find(SupplyLists.Id);
            sl.ListBin = fileUploadData;

            await _context.SaveChangesAsync();

        }

        return RedirectToPage("./Index");
    }

Он установил для ListBin значение null в дБ, что не то, что я хотел при сохранении изменений (я хотел сохранить старое значение ListBin в дБ).

...