Как я могу получить результаты вложенного запроса в виде сущностей с EF - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть несколько моделей в моем проекте:

**Model ServiceDeliveryDoc**
    public string Id { get; set; }
    public string PartnerDocId { get; set; }
    public DateTime Date { get; set; }
    public decimal Cost { get; set; }
    public string LegalEntityId { get; set; }


    [ForeignKey("LegalEntityId")]
    [InverseProperty("ServiceDeliveryDoc")]
    public LegalEntity LegalEntity { get; set; }
    [InverseProperty("ServiceDeliveryDoc")]
    public ICollection<ServiceRegistryToServiceDeliveryDoc> ServiceRegistryToServiceDeliveryDoc { get; set; }
**Model ServiceRegistry**
    public string Id { get; set; }
    public DateTimeOffset Date { get; set; }
    public decimal Cost { get; set; }

    [InverseProperty("ServiceRegistry")]
    public ICollection<ServiceRegistryToServiceDeliveryDoc> ServiceRegistryToServiceDeliveryDoc { get; set; }
**Model ServiceRegistryToServiceDeliveryDoc**
    public string Id { get; set; }
    public string ServiceRegistryId { get; set; }
    public string ServiceDeliveryDocId { get; set; }

    [ForeignKey("ServiceDeliveryDocId")]
    [InverseProperty("ServiceRegistryToServiceDeliveryDoc")]
    public ServiceDeliveryDoc ServiceDeliveryDoc { get; set; }
    [ForeignKey("ServiceRegistryId")]
    [InverseProperty("ServiceRegistryToServiceDeliveryDoc")]
    public ServiceRegistry ServiceRegistry { get; set; }

Я пишу несколько вложенных запросов в SQL, чтобы получить ServiceDeliveryDo c с LegalEntity, отфильтрованный с помощью ServiceRegistryId:

SELECT  ReturnsTable.[Id]
        ,ReturnsTable.[PartnerDocId]
        ,ReturnsTable.[Date]
        ,ReturnsTable.[Cost]
        ,ReturnsTable.[LegalEntityId]
        ,LegalEntityTable.[Name]
        ,ReturnsTable.[DocProcessId]
 FROM [Vishnya].[dbo].[ServiceDeliveryDoc] as ReturnsTable
 left join [Vishnya].[dbo].[LegalEntity] as LegalEntityTable
 on ReturnsTable.[LegalEntityId] = LegalEntityTable.[Id]
 where ReturnsTable.Id in ( select ServiceDeliveryDocId
                            from ServiceRegistry_To_ServiceDeliveryDoc
                            where ServiceRegistryId = @ServiceRegistryId)

Как получить симуляционный результат, используя платформу Enity

1 Ответ

0 голосов
/ 12 февраля 2020

Исходя из вашего запроса SQL и дизайна модели, существует отношение один-к-одному между ServiceDeliveryDoc и LegalEntity, отношение многие-ко-многим между ServiceDeliveryDoc и ServiceRegistry. Для загрузки связанных данных , вы можете использовать, как показано ниже:

var result = _context.ServiceDeliveryDoc
            .Include(sd => sd.LegalEntity)
            .Where(sd =>
                _context.ServiceRegistryToServiceDeliveryDoc
                    .Where(srt => srt.ServiceRegistryId == "101")
                    .Select(srt => srt.ServiceDeliveryDocId)
                    .Contains(sd.Id)
            )
            .Select(sd => new
            {
                sd.Id,sd.PartnerDocId , sd.Date,sd.Cost,sd.LegalEntityId, sd.LegalEntity.Name
            }).ToList();

DbContext

protected override void OnModelCreating(ModelBuilder modelBuilder)
{       
        modelBuilder.Entity<ServiceRegistryToServiceDeliveryDoc>()
            .HasOne(sr => sr.ServiceDeliveryDoc)
            .WithMany(sd => sd.ServiceRegistryToServiceDeliveryDoc)
            .HasForeignKey(sr => sr.ServiceDeliveryDocId);

        modelBuilder.Entity<ServiceRegistryToServiceDeliveryDoc>()
           .HasOne(sr => sr.ServiceRegistry)
           .WithMany(sd => sd.ServiceRegistryToServiceDeliveryDoc)
           .HasForeignKey(sr => sr.ServiceRegistryId);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...