.net 在EF中同时插入一对一的实体

k2arahey  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(154)

我有两个具有一对一关系的实体,我试图同时保存这两个实体而不执行上下文操作。SaveChanges在第一个实体和第二个实体之间进行,但INSERT语句与FOREIGN KEY约束dbo.HotelImages',column 'Id'冲突。这是我的代码:

var hotelImage = new HotelImageEntity
{
    Id = Guid.NewGuid(),
    IdHotel = entity.Id,
    GalleryId = galleryId,
    IdImageType = idImageType
});

await _context.HotelsImages.Add(hotelImage);

var hotelMultimediaHighlighted = new HotelMultimediaHighlighted
{
    Id = Guid.NewGuid(),
    IdHotel = entity.Id,
    IdHotelImage = hotelImage.Id,
    Order = 1
});

await _context.HotelMultimediaHighlighteds.Add(hotelMultimediaHighlighted);

await _context.SaveChangesAsync();

这是实体Map

public class HotelMultimediaHighlightMapping : IEntityTypeConfiguration<HotelMultimediaHighlightedEntity>
    {
        public void Configure(EntityTypeBuilder<HotelMultimediaHighlightedEntity> builder)
        {
            builder.HasKey(hm => hm.Id);

            builder.HasOne(hm => hm.Hotel)
                .WithMany(h => h.HotelMultimediaHighlighteds)
                .HasForeignKey(hm => hm.IdHotel);

            builder.HasOne(hm => hm.HotelVideo)
                .WithOne(hv => hv.HotelMultimediaHighlight)
                .HasForeignKey<HotelMultimediaHighlightedEntity>(hm => hm.IdHotelVideo);

            builder.HasOne(hm => hm.HotelImage)
                .WithOne(hg => hg.HotelMultimediaHighlightEntity)
                .HasForeignKey<HotelMultimediaHighlightedEntity>(hm => hm.IdHotelImage);

            builder.ToTable("HotelMultimediaHighlighted");
        }
    }
iibxawm4

iibxawm41#

您可以通过将HotelMultimediaHighlightedEntity直接分配给HotelImage来将它们连接在一起,外部变量将自动键入。

HotelImageEntity hotelImage = new HotelImageEntity
{
    Id = Guid.NewGuid(),
    IdHotel = entity.Id,
    GalleryId = galleryId,
    IdImageType = idImageType,
    HotelMultimediaHighlightEntity = new HotelMultimediaHighlightEntity()
   {
       Id = Guid.NewGuid(),
       IdHotel = entity.Id,
       Order = 1
   }
};

await _context.HotelsImages.Add(hotelImage);
await _context.SaveChangesAsync();

编辑:编辑以给予更好的说明和想法。

相关问题