Der LINQ-Ausdruck konnte bei Verwendung des OData-Frameworks mit DTOs nicht übersetzt werden
Posted: 18 Jan 2025, 19:49
Ich bin sowohl bei Odata als auch bei EntityFramework neu und versuche, OData mit DTOs zu verwenden. Mein Entitätsmodell wurde etwa so definiert:
Und meine Abfrage ist etwa so:
Selbst wenn ich das Element nicht in meiner Auswahl der Abfrage erwähnt habe, erhalte ich die Fehlermeldung Fehler beim Erstellen der Abfragezeichenfolge:
Idealerweise möchte ich, dass Odata dynamisch eine SQL-Abfrage erstellt, die nur die erforderlichen Daten abruft. Wie bei direkten Entitäten.
Ich habe https://github.com/dotnet/efcore/issues/27460 eine der Lösungen ausprobiert, die besagt, dass die Nullausbreitung auf „false“ gesetzt werden soll, aber Ich stehe immer noch vor dem gleichen Fehler.
Ich habe das Gefühl, dass ich etwas grundsätzlich nicht verstehe, wie DTOs definiert werden müssen.
Code: Select all
public Orders
{
public String OrderId{get; set;}
public List? Items{get;set;}
}
public Item
{
public String ItemId{get; set;}
public String ItemType{get; set;}
}
Code: Select all
_db.Orders.Select(o => new OrdersDTO
{
OrderId = o.OrderId,
// This works if I dont register Item DTO in my Odata EDM model
// Even if I comment this I still get the same error
Items = o.Items.Select(i => new Item
{
ItemId = i.ItemId,
ItemType = i.ItemType
}).ToList()
}
Code: Select all
Error creating query string: The LINQ expression '$it => new SelectAll{
Model = __TypedProperty_2,
Instance = $it,
UseInstanceForProperties = True
}
Ich habe https://github.com/dotnet/efcore/issues/27460 eine der Lösungen ausprobiert, die besagt, dass die Nullausbreitung auf „false“ gesetzt werden soll, aber Ich stehe immer noch vor dem gleichen Fehler.
Ich habe das Gefühl, dass ich etwas grundsätzlich nicht verstehe, wie DTOs definiert werden müssen.