如何在样板AppService中为子实体禁用更改状态跟踪

时间:2018-08-12 08:06:58

标签: asp.net-core entity-framework-core aspnetboilerplate

我正在将aspnet核心和ef核心与样板一起使用,并且想禁用对子实体的changestate跟踪。我该如何在AppService(即AsyncCrudAppService)中做到这一点。

例如:

实体:

[Table("tblCategory")]
public class Category : FullAuditedEntity<int>, IMustHaveTenant
{
    public const int MaxCodeLength = 128;
    public const int MaxNameLength = 2048;

    public virtual int TenantId { get; set; }

    [Required]
    [StringLength(MaxCodeLength)]
    public virtual string Code { get; set; }

    [Required]
    [StringLength(MaxNameLength)]
    public virtual string Name { get; set; }

    [ForeignKey("GroupId")]
    public virtual Group Group { get; set; }
    [Required]
    public virtual int GroupId { get; set; }
}

Dto:

[AutoMapFrom(typeof(Category))]
public class CategoryDto : FullAuditedEntityDto<int>
{
    [Required]
    [StringLength(Category.MaxCodeLength)]
    public string Code { get; set; }

    [Required]
    [StringLength(Category.MaxNameLength)]
    public  string Name { get; set; }

    [Required]
    public  int GroupId { get;  set; }

    [DisableValidation]
    public GroupDto Group{ get;  set; }

}

AppService更新方法:

public override async Task<CategoryDto> Update(CategoryDto input)
{
    var cat = await _categoryManager.GetA(input.Id);

    MapToEntity(input, cat);

    //I'd like to disable the tracking of cat.Group here ?

    await _categoryManager.UpdateA(cat);

    return await Get(input);
}

我想为cat.Group禁用更改检测,我该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:0)

加载时使用AsNoTracking解决了问题

答案 1 :(得分:0)

可以通过在呼叫中添加 .AsNoTracking() 来跳过跟踪。

例如:

var cat = await _yourDbContext.AsNoTracking().FirstAsync(m => m.Id == input.Id);

对于在其生命周期内不会被编辑的结果,这很好。