Blazor / Entity Framework-将子集合添加到时更新父项

问题描述 投票:1回答:1

我正在将BlazorEntity 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吗?我觉得我在这里缺少什么!

[任何帮助,我都对EFBlazor都陌生。

c# entity-framework blazor blazor-server-side
1个回答
0
投票

我真的应该再次打电话给数据库吗?

不,你不应该。

当然,实体框架应该选择新添加的实体

是的

并将其馈送到用户界面?

不,你必须

您只需要更新模型,就不必从数据库中获取模型,因为您已经有了新项目的引用。

假设您的服务返回了实体:

private async Task addTour(TourState state)
{
   var newBookingTour = new BookingTour();

   var newTour = await BookingTourService.CreateBookingTour(newBookingTour);        


   Booking = ExistingBookig.Tours.Add(newTour);
}
© www.soinside.com 2019 - 2024. All rights reserved.