I have multiple repositories in my application. Where should I put the ObjectContext? Right now, I have a reference like ObjectContext ctx; in every repository. What is the smartest and safest way to go about this?
C#/EF and the Repository Pattern: Where to put the ObjectContext in a solution with multiple repositories?
3.4k views Asked by Olsen At
2
There are 2 answers
Related Questions in C#
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in ENTITY-FRAMEWORK
- Query (or LINQ in Entity Framework) for getting user's rank
- I'm trying to create a user with identity in .NET 8 with Entity Framework and I'm getting the following error, both in MySQL and SQL Server
- Entity Framework, Error when deleting data from multiple tables at the same time
- The instance of entity type 'User' cannot be tracked because another instance with the same key value for is already being tracked. Not structural
- Is it a good idea to use EF with Supabase?
- ModelState.IsValid is false when its Data Model Concurrency Token is non nullable
- EF6 Find function always go to the DB
- A second operation started on this context before a previous operation completed. in .NET Core
- Internal .NET Framework Data Provider error 1 in EF
- why cannot dotnet ef tools find my installed dotnet sdk and runtime
- Blazor hybrid cant add migration
- Access to all types, classes and interfaces from multiple projects through reflection in C#
- how to Store/Map Complex data type using EF?
- The database operation was expected to affect 1 row(s), on UpdateAsync
- Is it possible to generate database-agnostic migrations with Entity Framework?
Related Questions in REPOSITORY
- Cant connect to any github repository from my netbeans 20
- Save Interface in DB golang
- Files lost from Github repository
- Single Github repository for two local repos for a fullstack project
- Git Webhook to trigger SageMaker Pipeline
- Need more parameters in subclass overridden method
- Build code in new cpp file in a cloned repository
- Troubleshooting Azure DevOps External Repository Cloning Authentication Issue
- How to have helm / helmfile install the most recent chart version from a repo?
- Can't able to merge branch to main branch in github
- I was a contributor on a Github repository that does not exist anymore. I still have those files on my computer. How do I upload the files to Github?
- Spring can't find the specified Bean
- Create SFDX project vs code from repository?
- Magnolia Git Repo Documentation Access
- Conditionnal repositories in Golang
Related Questions in REPOSITORY-PATTERN
- Repository manager receives the wrong connection string in .net core
- Using Repository pattern to fetch data from different places and build list of objects
- repository design pattern identitydbcontext problem
- I am getting this error in identitydbcontext in repository model design
- Blazor page what is the best way to get data based on various filtered conditions from the server's controller?
- Conditionnal repositories in Golang
- How to use EF Core 8's ExecuteUpdate() and ExecuteDelete() in a generic repository while keeping its interface agnostig from EF Core
- Facing Issue on Mapping Parent Child Relation Table using Automapper in C#
- How to avoid "The instance of entity type 'xx' cannot be tracked" exception in ASP.NET Core & EF Core
- MediatR Pattern CleanArchitecture with ASP.NET Core Web API
- how to achieve model-specific type inference from prisma model without explicitly passing the index string to PrismaClient object?
- MVC pattern combined with Repository pattern in Laravel?
- Polymorphism & Clean Architecture
- how to create a repository in GitHub
- How to register every IRepository interfaces via Dependency Injection?
Related Questions in OBJECTCONTEXT
- System.InvalidCastException: Unable to cast object of type 'ApplicationDbContext' to type 'System.Data.Entity.Infrastructure.IObjectContextAdapter'
- MSTest with Moq to Mock EF5 Linq query
- The property 'item_no' is part of the object's key information and cannot be modified. However I am not touching that property in updating at all
- Page Through Data Given DbContext in Entity Framework 6
- EF6 Add an ObjectSet based on an existing ObjectSet
- Performance issues when reloading entity
- Why do we need to create, open and close db connections to retrieve multiple result sets but not if retrieving one set?
- Entity Framework new object vs DbSet.Create
- How to load a table per hierarchy type from a DbDataReader with entity framework?
- How to find entity referred as a foreign key in Entity Framework dynamically
- Entity Framework - restoring navigation property after detaching entities
- Add EF 6.x EntityObject Generator in Visual Studio 2017
- How can I get two units of work under a single transaction
- Only on local database: ObjectContext instance has been disposed
- DbContext vs ObjectContext - navigation property behaviour change
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
A design with multiple
ObjectContextinstances is only acceptable if yourRepositorymethods commit the transaction. Otherwise, it is possible that external calls to commit the transaction may not persist everything you intend, because you will hold references to different instances of theObjectContext.If you want to restrict the
ObjectContextto a single instance, then you can build aRepositoryProviderclass that contains theObjectContext, and manages the propagation of repository actions to data commits. This can be best accomplished by either, - Injecting theObjectContextreference into each repository, or - Subscribing the repositories' events toEventHandlers that call the appropriate methods on theObjectContext.The following is a highly pluggable implementation that I have used:
Repository Provider Interface
Repository Factory Interface
The implementation has dependency on an
IEnumerable<IFilteredRepositoryFactory>.So, the implementation looks like:
Repository Provider Class
It should be noted that a new
Repositorywill be created by the first matching factory implementation. So, if the collection of factories contains multiple factories that can create aRepositoryfor the given repositoryType, the firstIFilteredRepositoryFactoryobject in the enumerable will be used and any subsequent factories will be ignored. In addition, if there is no registered factory, and exception will be thrown.