2
在我的數據庫中,我有標籤和帖子表。它們之間有多對多的關係。在標籤實體中,我不存儲標籤使用次數。此屬性(Quantity
)位於標記視圖模型內部。異步設置ViewMap方法(AutoMapper)中的視圖模型屬性
通過使用AutoMapper
我創建了Tag
和TagViewModel
之間的地圖。裏面AfterMap
方法我設置Quantity
屬性:
Mapper.Initialize(config =>
{
config.CreateMap<Tag, TagViewModel>()
.AfterMap(async (m, vm) =>
{
vm.Quantity = await tagRepository.CountById(vm.Id);
});
});
的問題是,此代碼並不總是奏效。有時Quantity
設置正確,有時也被設置爲0,有時我得到一個異常:
BeginExecuteReader requires an open and available Connection. The connection's current state is open.
我怎樣才能解決這個問題,或者有什麼更好的解決方案映射後自動設置的Quantity
價值?
這裏是我的代碼的其餘部分:
實體:
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<TagPost> TagPost { get; set; } = new HashSet<TagPost>();
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Content { get; set; }
public virtual ICollection<TagPost> TagPost { get; set; } = new HashSet<TagPost>();
}
public class TagThread
{
public int PostId { get; set; }
public Post Post { get; set; }
public int TagId { get; set; }
public Tag Tag { get; set; }
}
標籤瀏覽模式:
public class TagViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
}
庫:
public async Task<int> CountById(int id)
{
var quantity = await context.Tags
.SelectMany(t => t.TagPost.Where(c => c.TagId == id))
.CountAsync();
return quantity;
}
是的,但這應該與ProjectTo一起使用。 –
ProjectTo與MapFrom一起工作,因爲MapFrom接受表達式>,所以它可以被轉換成SQL。如果我使用了ResolveUsing,它不會是表達式>。 –
Jack
是的,我只是說這應該是你答案的一部分,因爲這個問題暗示了Map,因爲它具有AfterMap。 –