2016-03-31 10 views
0

Ich versuche in meinem Repository eine generische Funktion zu erstellen, um den nächsthöheren Int in einer Spalte namens Order zu erhalten. Ich denke, ich habe die Methode richtig, bin mir aber nicht sicher, wie ich es nennen soll.MVC Entity Framework generisch Get Next Int

namespace MyApp.Data.Models.Core.Repositories 
{ 
    public interface INextOrder 
    { 
     int AppID { get; set; } 
     int Order { get; set; } 
    } 
} 

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, INextOrder 
{ 
    public int NextFind(TEntity predicate, int appID) 
    { 
     int result = 0; 

     var count = Context.Set<TEntity>().Count(); 

     if (count != 0) 
     { 
      result = (from List in Context.Set<TEntity>() 
         where List.AppID == appID 
         orderby List.Order 
         select List.Order).ToList().LastOrDefault(); 

      result++; 
     } 

     return result; 
    } 
} 

Edit: Die NextFind Methode für den derzeit größten Int-Wert in der Order-Tabelle suchen, erhöhen sie von ein und dann diesen Wert zurück. Es müssen Parameter sein, welche Entity Framework-Entity-Klasse zu suchen ist, und auch ein Integer-Wert für Filterzwecke.

Antwort

0

Versuchen Sie, eine Erweiterungsmethode zu machen, damit Sie

entity.NextFind(5);

nennen kann, wenn das der Fall ist, die Klasse aktualisieren, sollten Sie dann Methode statisch sein sollte

public static int NextFind(this TEntity predicate, int appID) wie folgt aussehen

+0

Ich erkannte dank Ihrer Antwort, dass ich darüber nachgedacht habe. Meine Methodendefinition musste sein: public int NextFind (int appID) – user3140169

+0

Leider schien mein fixed zu funktionieren, bis ich meine Lösung neu aufgebaut habe. Ich bekomme jetzt den Fehler, dass es keine implizite Referenzkonvertierung von der Klasse (Tentity) nach INextOrder gibt. – user3140169

+0

@ user3140169, öffnen Sie eine andere Frage mit den Klassendefinitionen und jemand wird Ihnen auf jeden Fall etwas Hilfe geben (ich werde, wenn ich zuerst dazu komme, aber bezweifle es lol). – workabyte

0

Es sieht so aus, als ob Sie versuchen, die Bestellnummern, die ich empfehlen würde, manuell zu bearbeiten, da dies zu Problemen führen kann.

Wenn beispielsweise zwei Benutzer (A und B) diese Methode innerhalb eines sehr kurzen Zeitraums verwenden, verwenden sie beide den gleichen Int wie ihre orderID/num und nachdem Benutzer A seinen Benutzer B gespeichert hat verursacht Ärger, wenn er versucht, ihre Bestellung zu speichern, weil er/sie die gleiche orderID/num verwenden wird, die nicht das zu sein scheint, wonach Sie suchen.

Warum lässt sich SQL nicht stattdessen mit einem Identitätsfeld behandeln?

+0

Die Bestellung dient nur zur Anzeige der Reihenfolge der Artikel. Sie haben einen gültigen Punkt, aber es besteht nur eine sehr geringe Wahrscheinlichkeit, dass mehr als ein Benutzer pro AppID die Bestellung zu einem bestimmten Zeitpunkt ändert. – user3140169

Verwandte Themen