我正在将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禁用更改检测,我该怎么做?
谢谢。
答案 0 :(得分:0)
加载时使用AsNoTracking解决了问题
答案 1 :(得分:0)
可以通过在呼叫中添加 .AsNoTracking()
来跳过跟踪。
例如:
var cat = await _yourDbContext.AsNoTracking().FirstAsync(m => m.Id == input.Id);
对于在其生命周期内不会被编辑的结果,这很好。