【发布时间】:2021-04-23 02:28:01
【问题描述】:
Ad 和 Category 类之间存在多对多关系。
我有广告详情页面,我想在其中更新Ad。
在 UI 类别中实现为具有多个值的 Select2。
当我更新ad我得到错误类别的实例已经被跟踪。(实体类型的实例无法被跟踪,因为另一个实例具有相同的{'Id'} 的键值已被跟踪
)
这是我检索广告以显示在详细信息页面上的代码,也是更新广告的代码。
public async Task<Ad> GetById(int id)
{
return await _databaseContext.Ads.Include(x => x.SchoolLevels).Include(x => x.Categories).Include(x => x.Images).FirstOrDefaultAsync(x => x.Id == id);
}
public async Task<Ad> Update(Ad ad)
{
_databaseContext.Entry(ad).State = EntityState.Modified;
_ = await _databaseContext.SaveChangesAsync();
return ad;
}
这似乎很常见。我有详细信息页面,在某些选择框中我必须选择多个值。
这是我的 UI 代码 (Blazor)
<div class="form-group">
<label>Categories</label>
<Select2 TItem="Categories"
TSource="List<Category>"
IdSelector="@(i => i != null ? i.Id.ToString() : "")"
TextSelector="i => i.Name"
Datasource="Categories"
Multiselect="true"
Value="@Ad.Categories"
GetElementById="(items, filter, token) => Task.FromResult(items.SingleOrDefault(i => i.Id.ToString().Equals(filter)))"
FilterFunction="(items, filter, token) => Task.FromResult(items.Where(i => i.Name.ToLower().StartsWith(filter.ToLower())).ToList())">
</Select2>
</div>
</div>
<SaveButton IsSaving="IsSaving" />
</EditForm>
【问题讨论】:
标签: asp.net entity-framework entity-framework-core blazor ef-core-5.0