我正在将Blazor
与Entity Framework
服务器端应用程序一起使用。
我有一个父实体Booking
和一个子集合Tours
。我有一个页面,可以在其中添加游览到Booking的Tours
collection。
public class Booking
{
IEnumerable<Tours> Tours { get; set; }
}
我有一个主要的父预订组件,它只是预订子组件(例如Tours)的外壳。我将子项集合传递给子项,就像在预订页面上一样:
<Tours Tours="Booking.Tours" />
@code {
protected override async Task OnInitializedAsync()
{
Booking = await BookingService.GetBooking(reference);
}
}
但是我发现,当我添加Tour时,除非我再次致电以重新获取带有其子项的预订,否则页面不会使用新添加的Tour进行更新。
private async Task addTour(TourState state)
{
var newBookingTour = new BookingTour();
var newTour = await BookingTourService.CreateBookingTour(newBookingTour);
// UI ONLY UPDATES WHEN I DO THIS
Booking = await BookingService.GetBooking();
}
这是我用来将实体保存到method
的通用DB
:
public async Task<TEntity> Upsert(TEntity item)
{
var entity = this.Context.Update(item);
await this.SaveChangesAsync();
return entity.Entity;
}
我真的应该再次打电话给DB
吗?当然Entity Framework
应该选择新添加的实体并将其馈送到UI
吗?我觉得我在这里缺少什么!
[任何帮助,我都对EF
和Blazor
都陌生。
我真的应该再次打电话给数据库吗?
不,你不应该。
当然,实体框架应该选择新添加的实体
是的
并将其馈送到用户界面?
不,你必须
您只需要更新模型,就不必从数据库中获取模型,因为您已经有了新项目的引用。
假设您的服务返回了实体:
private async Task addTour(TourState state)
{
var newBookingTour = new BookingTour();
var newTour = await BookingTourService.CreateBookingTour(newBookingTour);
Booking = ExistingBookig.Tours.Add(newTour);
}