EF Kern konnte nicht übersetzt werden und werden lokal ausgewertet

Ich habe eine Abfrage in EF-Core 1.1.2 ausgewertet wird auf client-Seite und würde gerne wissen, ob es einen besseren Weg gibt, um es zu übersetzen in sql?

Abfrage:

from l in _ctx.Locations
  join i in _ctx.Inventories on l.Id equals i.LocationId
  join it in _ctx.Items on i.ItemId equals it.Id
  where l.ProjectId == projectid
  group i by new {l.Id, l.LHA} into il
  select new InventoryLocations() {
      Id= il.Key.Id,
      LHA = il.Key.LHA,
      FlaggedItems = il.Any(x=>x.Item != null && x.Item.Flagged)
  }

Wenn nicht, welche anderen Optionen habe ich?

  • Wie ich wissen, dass es noch keine Möglichkeit, das mapping Ansichten.
  • FromSQL () - Methode zurückgeben kann, Arten, die bereits in den bekannten Rahmen nur und ich kann nicht daneben ein Modell wie [NotMapped] zum Beispiel.
  • Bewegen zurück zu ef6 ist keine option da .net core ist das Ziel-framework.

Modelle:

public class Location
{
    public Guid Id { get; set; }

    [ForeignKey("Project")]
    public Guid ProjectId { get; set; }
    public Project Project {get; set; }
    public string Name { get; set; }
    public string LHA { get; set; }

    [ForeignKey("ScanUser")]
    public Guid? ScanUserId { get; set; }
    public User ScanUser { get; set; }
    [ForeignKey("CheckUser")]
    public Guid? CheckUserId { get; set; }
    public User CheckUser { get; set; }

    [ForeignKey("GroupLeader")]
    public Guid? GroupLeaderId { get; set; }
    public User GroupLeader { get; set; }
    public int State { get; set; }
}

public class Inventory
{
    public Guid Id { get; set; }

    [ForeignKey("Project")]
    public Guid ProjectId { get; set; }
    public Project Project {get; set; }
    public string EANCode { get; set; }
    [ForeignKey("Location")]
    public Guid LocationId { get; set; }
    public Location Location { get; set; }
    public Double ScanQty { get; set; }
    [ForeignKey("ScanUser")]
    public Guid? ScanUserId { get; set; }
    public User ScanUser { get; set; }
    public DateTime? ScanDate { get; set; }
    [ForeignKey("Item")]
    public Guid? ItemId { get; set; }
    public Item Item { get; set; }

    [ForeignKey("InventoryTask")]
    public Guid? InventoryTaskId { get; set; }
    public InventoryTask InventoryTask { get; set; }

    [ForeignKey("CheckUser")]
    public Guid? CheckUserId { get; set; }
    public User CheckUser { get; set; }
    public DateTime? CheckDate { get; set; }
    public Double PrevQty { get; set; }
}

public class Item
{
    public Guid Id { get; set; }
    [ForeignKey("Project")]
    public Guid ProjectId { get; set; }
    public Project Project {get; set; }
    public string ItemNo { get; set; }
    public string EANCode { get; set; }
    public string Name { get; set; }
    public Double Price { get; set; }
    public bool Deleted { get; set; }
    public DateTime ChangeTime { get; set; }

    public Double BaseQty { get; set; }
    public bool Flagged { get; set; }
}
Vermeiden GroupBy Abfragen, wenn möglich. Blick auf die geposteten Abfrage, sollte es machbar sein - weder Verknüpfungen noch group by benötigt wird. Hoffe, Sie haben navigation Eigenschaften wie Location.Inventories und Inventory.Item ? Kannst du die entity-Modellen?
Ich habe meine Modelle. Inventar.Element existiert, aber ich habe keinen Ort.Die Vorräte. Könnte es irgendwie helfen? Der Antrag behandelt mehrere Projekte, so Lage, item und Inventar sind ziemlich große Datenmengen. (~2-3M Elemente und ~4-5 Lagerbestände pro Artikel)
Ihre [ForeignKey] Attribute falsch sind. Sie sollte auf der navigation-Eigenschaft und Referenz der key-Feld-z.B. [ForeignKey("ProjectId")] public Project Project { get; set; }.
Ich denke, es kann so genutzt werden als Guid ProjectId ist ein Fremdschlüssel, der von ef-Namenskonvention. Meine ForeignKey-Attribute sind nur Punkte auf der rechten Navigations-Eigenschaft.
Mit ProjectId etc. konform zu Namenskonventionen und EF wäre mit dieser zu bestimmen, die Beziehungen. Aber Ihre Nutzung der [ForeignKey] - Attribut ist falsch und dient absolut keinen Zweck. Ich bin überrascht, dass EF nicht eine exception werfen, wenn Sie die Erstellung Ihrer Migrationen, aber es muss sein, ihn zu ignorieren, weil es bereits herausgefunden, die Beziehungen durch Namensgebung. docs.microsoft.com/en-us/ef/core/modeling/relationships

InformationsquelleAutor Perrier | 2017-07-21

Schreibe einen Kommentar