Ich benutze EF5, Arbeitseinheit und Repository-Muster. Ich möchte einige Einschränkungen beim Zugriff auf Daten für bestimmte Benutzer definieren. In der Datenbank habe ich eine Tabelle entworfen, um meine Entitätsnamen und ihre Eigenschaften zu behalten, die EntityProperties genannt wird, und eine andere Tabelle, um die Werte dieser Eigenschaften zu behalten, die PropertyValues genannt wird, und jede EntityProperty hat einen oder mehrere PropertyValues. In Business-Schicht, wenn Benutzer Daten anfordert, wenn für ihn eine Einschränkung definiert ist, sollten der linq-Anweisung einige Bedingungen hinzugefügt werden. Was ich mache, ist, die Liste der Entity-Namen und ihrer Eigenschaften und Werte mit 'userId' zu erhalten, dann füge ich eine 'Where'-Klausel zur linq-Abfrage hinzu. Die Entitätsnamen und ihre Eigenschaften haben jedoch den Typ "String". Daher sollte Reflection verwendet werden, um sie zu verwalten. Aber ich kenne diesen Teil nicht, und ich weiß nicht, wie LINQ where-Klausel aus einer gegebenen Reihe von Bedingungszeichenfolgen erstellen. Zum Beispiel, nehmen wir an, dass ein Benutzer die Liste Befehle anfordert, und Benutzer-ID ist 5. Ich zuerst die Zugriffsbeschränkung Tabellen abfragen, und das Ergebnis ist:Was ist der beste Weg, stark typisierte LINQ-Abfragen aus einigen gegebenen Zeichenfolgen über Reflexion
„Order“, „Id“, „74“
"Order", "Id", "77"
"Order", "Id", "115"
Es bedeutet, dass die Nutzer nur diese drei Aufträge sehen sollten, während Tabelle in Bestellungen, wir habe mehr Aufträge. Also, wenn ich eine LINQ-Abfrage auf Aufträge zu bekommen, wie verwenden möchten:
var orders = from order in Context.Orders
muss ich es zu etwas machen, wie:
var orders = from order in Context.Orders
// wo Auftrags-ID in 74 sein sollte, 77,115
Die Reihenfolge der Entitäten und Id-Eigenschaften aus "Strings" und "Id" muss jedoch unbedingt berücksichtigt werden. Also zwei Fragen:
Was ist der beste Weg, stark aus Strings getippt werden? Gibt es einen besseren Weg für mich, dies mit besserer Leistung zu tun?
Welche Einschränkungen würden Sie in der Basis haben? Sie zeigen ein 'Contains' in einem' int'-Feld an. Aber wirst du andere Einschränkungen haben? –
Eine Einschränkung für eine Eigenschaft zum Beispiel: Benutzer mit der ID 5 darf nur auf Aufträge zugreifen, deren Preis gleich "1200" ist. –
Ok. Und wie wäre das in Ihrer Begrenzungstabelle dargestellt? –