2016-12-30 14 views
4

Ich versuche, Code First EF6 zu lernen, und ich bin verwirrt über DBContext.C# Entity Framework DBContext

Die Datenbank, an der ich arbeiten werde, enthält mehr als 800 Tabellen, während ich beim Arbeiten mit bestimmten Teilen der Anwendung nur mit 1-10 Tabellen arbeite.

Also meine Frage ist; Würde ein DBContext mit mehr als 800 Klassen keinen großen negativen Einfluss auf die Systemressourcen haben?

Ich denke, ich bin neu in dieser Technologie und verwirrt in Bezug auf die tatsächliche Bedeutung der Informationen, die ich während meiner Forschung nehme.

Vielen Dank.

HINWEIS: Vielen Dank für Ihre Eingaben. Bitte werfen Sie einen Blick auf diesen Beitrag: Using multiple DbContexts with a generic repository and unit of work. Dort steht, dass ich keine Tabellen in getrennten Kontexten haben kann, die sich aufeinander beziehen ?!

Aber in einer realen Welt scenerio mein Verständnis ist, dass es üblich ist, die Tabelle Beziehungen in fokussierten Bereichen zu brechen, wie ist das in Code First EF getan? Danke noch einmal.

+0

Gerade DB ersten Ansatz verwenden und die Entitäten importieren, die erforderlich sind. – Ric

+1

Sie wollen nicht ein Modell mit mehr als 800 Tabellenobjekte. Sie können mehrere dbcontext-Modelle verwenden. Sie können ein Modell für den Umgang mit Mitarbeitern und ein anderes für den Umgang mit Kursen oder anderen Bereichen Ihres Projekts erstellen. – JamieD77

+0

Aktualisiert meine Antwort – Valkyrie

Antwort

1

Aktualisiert

Wenn Sie Repository-Muster verwenden, können Sie nicht mehrere DbContext machen gehen, erstellen Sie eine generisch, und übergeben Sie es zu Ihrem Allgemein Repository wie unten:

public class Repository<T> : IRepository<T> 
    where T : EntityBase 
{ 
    internal MyDbContext context; 
    internal DbSet<T> dbSet; 

    public Repository() 
    { 
     context = new MyDbContext(); 
     this.dbSet = context.Set<T>(); 
    } 
    public void Add(T entity) 
    { 
     dbSet.Add(entity); 
    } 
    public void Delete(T entity) 
    { 
     dbSet.Remove(entity); 
    } 
    public void Delete(int id) 
    { 
     dbSet.Remove(dbSet.Find(id)); 
    } 
    public T GetById(int id) 
    { 
     return dbSet.Find(id); 
    } 
    public IEnumerable<T> GetAll() 
    { 
     return dbSet.AsEnumerable(); 
    } 
    public void Update(T entity) 
    { 
     dbSet.Attach(entity); 
     context.Entry(entity).State = EntityState.Modified; 
    } 
    public void Save() 
    { 
     context.SaveChanges(); 
    } 
} 

und Sie sollten schließe deine DbSets auch dort ein.


Wenn Sie EF-Code-First tut sein Ihr dann POCO Klasse zu entwerfen, basierend auf wie viele benötigt werden, aber nicht mehr. Aber basierend auf dem, was Sie über 800 Tabellen sagen, ich denke, Sie möchten versuchen, Database-First Ansatz eher. Ich schlage Ihnen diese article sehr vorsichtig vor, da es alles erklärt, was Sie brauchen.

Update:

Wenn Sie dies aus DataBase-First-Ansatz: Ado.NET Entity Model Schafft Ihr DbContext für Sie! Wenn Sie sich die .EDMX-Datei genauer ansehen, sind es im Grunde genommen Ihre POCO-Klassen.

Nun, wenn Sie Code-First-Ansatz versuchen, sagen können Sie diese DbContext Klasse haben:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("name=MyConnection") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, YourApplication.Migrations.Configuration>("MyConnection")); 
    } 
    //Every time you need to add new Table you add them here. 
    public DbSet<Users> Users { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     //And Map them here 
     modelBuilder.Configurations.Add(new UsersMap()); 
    } 
} 

Sie fügen einfach ein neues DbSet<Class> auf Ihre DbContext wie unten:

public DbSet<POCO CLASS> CLASS { get; set; } 

Und so weiter Normalerweise erstelle ich eine DbContext für jede Area, die ich in meiner MVC-Anwendung habe. So können Sie gehen wie Admin Area ->AdminDbContext Und so weiter.

+0

Was ich verwirrend finde, ist; Wir haben eine Container-App und darin gibt es viele Komponenten (Kunden-/Personalakten, Kurse, Business-Kalender, Golf ...), also wie entwickle ich die Anwendung von diesem Standpunkt aus, dh fügen wir neue Klassen zu DBContext hinzu wie wächst unser Bedürfnis? Vielen Dank. – Guygar

+0

@Guygar lassen Sie mich und Beispiel dann. check zurück in ein paar Minuten – Valkyrie

2

Sie benötigen nur die Tabellen, mit denen Sie arbeiten, in Ihrem db-Kontext (wenn die db bereits existiert). Der einzige Grund, warum Sie einen DB-Kontext mit allen Tabellen benötigen, wäre, wenn Sie die gesamte Datenbank von Grund auf neu erstellen möchten.

Werfen Sie einen Blick auf die beschränkten Kontext Muster von DDD: http://martinfowler.com/bliki/BoundedContext.html

+0

Great link! Konzentriert sich darauf, worum es bei meiner Frage geht. Könnten Sie mich bitte auf die richtige Richtung hinsichtlich seiner Implementierung in einer Code-First Entity Framework-Umgebung hinweisen? Vielen Dank. – Guygar

+0

https://msdn.microsoft.com/en-us/magazine/jj883952.aspx?f=255&MSPPError=-2147217396 –

+0

https://msdn.microsoft.com/en-us/magazine/dn802601.aspx –

Verwandte Themen