Używam EF5, jednostki pracy i wzorca repozytorium. Chcę zdefiniować pewne ograniczenia dostępu do danych dla określonych użytkowników. W bazie danych zaprojektowałem tabelę, aby zachować nazwy encji i ich właściwości, które są nazywane EntityProperties, i inną tabelę, aby zachować wartości tych właściwości, które są nazywane wartościami właściwości PropertyValues, a każda właściwość EntityProperty ma jedną lub więcej wartości PropertyValues. W warstwie biznesowej, gdy użytkownik żąda danych, jeśli zdefiniowano dla niego jakieś ograniczenie, należy dodać pewne warunki do instrukcji linq. Co mogę zrobić, to uzyskać listę nazw encji i ich właściwości i wartości przez "userId", a następnie dodaję klauzulę "Where" do zapytania linq. Jednak nazwy encji i ich właściwości są typu "String", dlatego też powinienem używać Reflection do zarządzania nimi. Ale nie znam tej części i nie wiem jak utworzyć LINQ gdzie klauzula z danego zestawu ciągów warunkowych. Na przykład, załóżmy, że użytkownik zażąda listy rozkazów i identyfikator użytkownika to 5. raz pierwszy kwerendy tych tabel ograniczenia dostępu, a wynik jest:Jaki jest najlepszy sposób tworzenia silnie typowanych zapytań LINQ z niektórych łańcuchów, poprzez odbicie
„Zamówienie”, „ID”, „74”
"Zamówienie", "ID", "77"
"Zamówienie", "ID", "115"
oznacza to, że użytkownik powinien zobaczyć tylko te trzy rozkazy, natomiast w zamówieniach tabeli, my mieć więcej zamówień. Więc jeśli chcę użyć kwerendy LINQ dostać rozkazy, jak:
var orders = from order in Context.Orders
muszę przekształcić go w coś takiego:
var orders = from order in Context.Orders
// gdzie kolejność id powinno być 74, 77,115
Jednak uzyskanie zamówienia na właściwość entity i id z ciągu "Order" i "Id" wymaga refleksji. Tak więc dwa pytania:
Jaki jest najlepszy sposób, aby uzyskać silnie wpisane z ciągów? Czy jest lepszy sposób, aby to zrobić, z lepszą wydajnością?
Jakim ograniczeniom trzeba w bazie? Pokazujesz "Zawiera" na polu 'int'. Ale czy będziesz mieć inne ograniczenia? –
Wszelkie ograniczenia dotyczące dowolnej właściwości, na przykład: użytkownik z identyfikatorem 5 ma tylko dostęp do zamówień, których cena wynosi "1200" –
Ok. I jak by to było przedstawione w twoim ograniczonym stole? –