Ich versuche, DbSet in meiner Datenbankkontextklasse zu deklarieren. Weil ich nicht welche Klasse (Entity Framwork Class) Benutzer anruft. Deshalb möchte ich das DbSet mit dynamic deklarieren.Wie deklariere DbSet <dynamic>?
Antwort
Ich würde versuchen, alles in Ihrem Kontext explizit definiert zu haben. Es gibt eine Menge Funktionalität, die in diese Eigenschaftsdeklaration eingebacken ist, nicht zuletzt der Entwicklungszeitvorteil von Typen.
Es gibt viele Techniken für die dynamische Abfrage, aber ich werde eine, die ich in der Vergangenheit für die dynamische Abfrage von Nachschlagetabellen verwendet habe, veröffentlichen.
public List<LookupItemDTO> LoadItems(int lookupId)
{
//nothing special here, just map the lookup id to a name
var lookupRepo = new LookupRepository<LookupDefinition>(uow);
var lookup = lookupRepo.Find(id);
//map the lookup's name from the table to a type. This is important DO NOT ACCEPT A TABLE NAME FROM THE USER.
var targetType = Type.GetType("MyApp.DomainClasses.Lookup." + lookup.Name + ",MyApp.DomainClasses");
// this is an optional extra step but it allows us to instantiate an instance of our repository to ensure that business rules are enforced
var lookupType = typeof(LookupRepository<>).MakeGenericType(targetType);
dynamic LookupTable = Activator.CreateInstance(lookupType);
//just some pattern nonsense to wire up the unit of work
LookupTable.SetupUOW(uow);
//make sure to cast it into something you can work with ASAP
var data = ((IQueryable<LookupTableBase>)LookupTable.All).OrderByDescending(l => l.IsVisible).ThenBy(l => l.SortOrder);
var list = from li in data
select new LookupItemDTO
{
Id = li.Id,
Description = li.Description,
Display = li.Display,
SortOrder = li.SortOrder,
IsVisible = li.IsVisible
};
return list.ToList();
}
Der Schlüssel hier ist, dass Sie können dynamisch Tabellen abfragen, aber es ist besser, es auf einem höheren Niveau zu tun. Haben Sie auch eine Art Indirekt zwischen Ihnen und der Eingabe Ihres Benutzers. Lassen Sie sie eine Tabelle aus einer Liste auswählen und verwenden Sie die ID aus dieser Tabelle, um den Namen nachzuschlagen. Meine Lösung hier ist die Nachschlagetabelle Definitionstabelle. Alle dynamischen Abfragen beginnen dort zuerst und dann werden Werte aus dieser Definitionstabelle verwendet, um die erforderlichen Typen zu erstellen.
- 1. Was ist der Unterschied zwischen DbSet <> und virtuellem DbSet <>?
- 2. Wie man DbSet <Team> zu DbSet <EntityBase>
- 3. Wenn DbSet <T> .Add() vs DbSet <T> .Attach()
- 4. Mocking DbSet <TEntity> im Repository
- 5. C# Generika für DbSet <something>
- 6. Wie verwende ich Abhängigkeitsinjektion mit generischem dbset <T>
- 7. Konvertieren DbSet <T1> zu DbSet <T2> wo T1 und T2 gleiche Signatur haben
- 8. Wie Datenbank mit DbSet
- 9. Umwandlung Aufgabe <DbSet<T>> zu Aufgabe <IEnumerable <T>>
- 10. DbSet umfassen Erweiterungsmethode Looping
- 11. Wählen Sie() nicht in DbSet <Category> Property
- 12. Wie konvertiere ich dieses IQueryable <Patient> zu DbSet <Patient>?
- 13. Gibt es so etwas wie DbSet <T> .RemoveWhere (Prädikat <T>)
- 14. Entity Framework Vor- und Nachteile von DBSet <MappingTable>
- 15. Mocking dbset <T> wobei Methode gibt notSupportedException zurück
- 16. DbSet <entity> .Load() -Funktion fehlt in EF 6.0
- 17. Unit Tests Mock DbContext DbSet <> ist Null
- 18. Entity Framework: Umgang mit childern mit DBSet <Parent>
- 19. EF6 DbSet <T> gibt null zurück in Moq
- 20. Wie deklariere globale Variablen
- 21. Iterieren über DbSet <TEntity> vs IQueryable <out T>
- 22. Was bedeutet "deklariere + x" gegen "deklariere -x"?
- 23. Apply OrderBy mit DbSet
- 24. Entity Framework und DbSet
- 25. Über DbSet und DbContext
- 26. DbSet, um mehrere Einträge
- 27. Wie deklariere ich eine JComboBox?
- 28. Wie deklariere ich richtig "extern"?
- 29. Wie deklariere Xamarin.Forms.Dependency mit F #?
- 30. Bei Verwendung von DbSet <T> .SqlQuery(), wie benannte Parameter verwenden?
Was hast du probiert? Was ist Ihr spezifischer Anwendungsfall? Ich denke, es ist besser, alles im Kontext explizit zu definieren und dann die dynamischen Dinge auf einer anderen Ebene zu tun. – kettch