Я реализовал расширение с помощью 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