Odata раскрывают проблему, когда все данные нулевые в левом соединении - PullRequest
1 голос
/ 30 марта 2020

Я реализовал расширение с помощью odata v4, используя ядро. net. Он работает нормально, но создает проблему, когда не удается найти ключевое свойство в раскрытии. Свойство обнуляется, поэтому EF применяет к нему левое соединение. Чтобы подтвердить то же самое, я также проверил запрос в SQL профилировщике, и этот запрос также отлично работает в SQL Server.

Если я передаю все свойства как выбранные, они работают нормально. Давайте рассмотрим один пример.

Модель:

Product{
public int prodid {get,set};
public string prodname {get,set};
public string depid {get,set};
public Department department{get,set};
}

Department{
public string depid {get,set};
public string depname{get set}
}

работает Развернуть URL-адрес одат:

http://localhost:5655/prod?$count=true$select=prodid$expand=department($select=depid,depname)
value:
{
       prodid:1
      Department:
      {
            depid:133
            depname:null
      }
}

Не работает Развернуть URL-адрес одат:

http://localhost:5655/prod?$count=true$select=prodid$expand=department
Giving 500 internal server error

Данные в БД:

Product table
prodid |depid |prodname
1      |133   |test

No data available in Department table for depid 133

Время выполнения в профилировщике, которое генерируется ниже запроса:

select p.prodid,p.depid,t.depid, t.depname
from (select p.prodid,p.prodname from product p) as [p]
left join ( select d.depid, d.depname from department d) as [t] on p.depid=t.depid
result:
  prodid |p.depid |t.depid  |t.depname
  1      |133     |null     |null
...