vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Repository mit UnitOfWork und mehreren Datenbanken 
Autor: SVisor
Datum: 13.06.12 14:33

Hallo zusammen

In meiner mehrschichtigen Applikation arbeite ich mit Komponenten (BusinessLayer), Repositories und dem UnitOfWork-Pattern (DataLayer). Um den Code möglichst einfach zu halten, erben alle Repositories von einem GenericRepository. Das GenericRepository stellt Methoden zum lesen, hinzufügen, updaten und löschen von Entitäten aus dem EntityFramework zur Verfügung. Im GenericRepository wird zusätzlich das UnitOfWork-Pattern verwendet. Das ganze sieht ungefähr so aus:

Namespace MyApp
 
	Public Class Cars
		Property CarName As String
	End Class
 
	Public Class Planes
		Property PlaneType As String
	End Class
 
	Public Interface ICarComponent
		Function DoSomeThing() As IList(Of Cars)
	End Interface
 
	Public Class CarComponent
		Inherits Component(Of Cars)
		Implements ICarComponent
 
		Private ReadOnly mCarRepository As ICarRepository
 
		Public Sub New(pCarRepository As ICarRepository)
			MyBase.new(pCarRepository)
		End Sub
 
		Private Function DoSomeThing() As IList(Of Cars) Implements _
  ICarComponent.DoSomeThing
			Return mCarRepository.DoSomeThing()
		End Function
 
	End Class
 
 
	Public Interface ICarRepository
		Function DoSomeThing() As IList(Of Cars)
	End Interface
 
	Public Class CarRepository
		Inherits Repository(Of Cars)
		Implements ICarRepository
 
		Public Sub New(unitOfWork As IUnitOfWork)
			MyBase.New(unitOfWork)
		End Sub
 
		Private Function GetAllActive() As IList(Of Cars) Implements _
  ICarRepository.DoSomeThing
			Return GetDataFromDatabase
		End Function
 
	End Class
 
 
 
	Public MustInherit Class Repository(Of TEntity As Class)
		Implements IRepository(Of TEntity)
 
		Private ReadOnly mObjectSet As IObjectSet(Of TEntity)
		Private ReadOnly mUnitOfWork As IEFUnitOfWork
		Private ReadOnly mObjectContext As ObjectContext
 
		Public Sub New(ByVal pUnitOfWork As IUnitOfWork)
			mUnitOfWork = pUnitOfWork
			mObjectContext = mUnitOfWork.Context
 
			If Me.mUnitOfWork IsNot Nothing AndAlso Me.mObjectContext IsNot Nothing Then
				mObjectSet = mObjectContext.CreateObjectSet(Of TEntity)()
			End If
		End Sub
 
	End Class
 
End Namespace
Nebem dem UnitOfWork-Pattern wird Castle-Windsor als DI-Container verwendet.

So, nun zu meiner Frage. Wir haben unterschiedliche Datenbanken. Abhängig von der Entität, in Beispiel oberhalb "Cars" muss eine andere Datenbank verwendet werden. Will heissen, wenn ich die Entität "Cars" habe, dann soll mir Castle-Windsor eine UnitOfWork mit dem DBContext der Datenbank A erzeugen. Arbeite ich aber mit der Entität "Planes", so soll mit Calse-Windsor ein UnitOfWork mit dem DBContext der Datenbank B erzeugen. Nun, wie konfigurier ich Castle Windsor entsprechend bzw. wie muss ich meine UnitOfWork Klasse anpassen, damit ich hier jeweils verschiedene DBContexte verwenden kann?!?

Besten Dank für euere Hilfe....

Peter
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Repository mit UnitOfWork und mehreren Datenbanken938SVisor13.06.12 14:33
Re: Repository mit UnitOfWork und mehreren Datenbanken610Micke14.06.12 13:33

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel