Ich möchte eine generische Methode zum Lesen aller Daten für jede Tabelle in meinem SQL-Server mit EntityFramework und exportieren Sie diese Daten in MongoDB mit MongoDB C# Treiber. HierGenerische Methode zum Lesen von Daten aus SQL-Tabelle und Export nach MongoDB mit C# -Treiber
ist, was ich
using (MyEntities context = new MyEntities())
{
var projects = context.Projects.ToList();
foreach (var project in projects)
{
var entityType = Type.GetType($"NameSpace.Imp{project.Id}", false);
var entityTypeResults = context.{entityType}.ToList();
var entityTypeMongoCollection = _mongoConnect.Database.GetCollection<entityType>("MyCollectionName");
entityTypeMongoCollection.InsertMany(entityTypeResults);
}
}
zu tun versuche Wie kann ich dies zu erreichen, so dass ich nicht diese Schritte für jede Tabelle zu wiederholen.
Alle meine Tabellen heißen Imp{Id}
und ich habe ID list
in project
Variable, also habe ich Liste der Tabellennamen.
Ich bin mit C# .NET 4.6.1, Entity Framework 6.0, MongoDB C# Treiber 3.0
Dank @CodeCaster ist hier der volle Arbeits Code, wenn jemand nach ähnlicher Hilfe suchen.
public void ExporAll()
{
MethodInfo openMethod = typeof(MyCurrentClassName).GetMethod("CopyEntitiesToMongo");
using (MyEntities context = new MyEntities())
{
var projects = context.Projects.ToList();
Assembly assembly = Assembly.Load("NameSpace");
foreach (var project in projects)
{
var entityType = assembly.GetType($"NameSpace.Imp{project.Id}", false);
MethodInfo boundGenericMethod = openMethod.MakeGenericMethod(entityType);
if (_mongoConnect?.Database != null)
boundGenericMethod.Invoke(this, new object []{context, _mongoConnect.Database, "MyCollectionName"});
}
}
}
public void CopyEntitiesToMongo<TEntity>(DbContext context,
IMongoDatabase mongoDatabase,
string collectionName) where TEntity : class
{
if (context != null)
{
var entityTypeResults = context.Set<TEntity>().ToList();
var entityTypeMongoCollection = mongoDatabase.GetCollection<TEntity>(collectionName);
entityTypeMongoCollection.InsertMany(entityTypeResults);
}
}
Also mit "das" meinst du context. {EntityType} .ToList(); 'und' _mongoConnect.Database.GetCollection '? 'DbContext.Set ()' und einige Überlegungen könnten helfen. –
CodeCaster
@CodeCaster Ich bin dir nicht gefolgt. War das eine Frage oder ein Kommentar? Ich möchte in der Lage sein, einen Lesevorgang mit Kontext zu machen. .ToList(); und machen Sie dasselbe mit _mongoConnect.Database.GetCollection
HaBo