DATAONION IS DEAD - YOU SHOULD BE USING CLEAN ARCHITECTURE
Support for Entity Framework 7 is now available.
During 2018/2019 we have moved away from using Data Onion to automatically generate repository classes and instead follow this MediatR rule: https://rules.ssw.com.au/use-the-mediator-pattern-with-cqrs
Another problem is that .NET Core does not have an implementation of T4 templates – which seriously limits where this library can be used.
“No, the repository/unit-of-work pattern (shortened to Rep/UoW) isn’t useful with EF Core. EF Core already implements a Rep/UoW pattern, so layering another Rep/UoW pattern on top of EF Core isn’t helpful. A better solution is to use EF Core directly, which allows you to use all of EF Core’s feature to produce high-performing database accesses.”
– Jon Smith https://www.thereformedprogrammer.net/is-the-repository-pattern-useful-with-entity-framework-core/
Die-hard fans of building repositories on top of EF Core should investigate Steve Smith’s Specification Pattern examples:
Introducing SSW Data Onion
Integrate Entity Framework into your Onion Architecture Enterprise Application
When building enterprise .net applications you should follow the Onion Architecture as outlined above. This domain model-centric approach encourages the development of maintainable solutions by integrating loosely coupled components via interfaces.
Adopting Onion architecture can lead to writing lots of extra code. SSW Data Onion makes this easy by generating an Entity Framework Code First implementation for persisting your Domain Entities.
In a nutshell
- SSW Data Onion contains 3 .tt templates that read domain classes from your appropriate domain assembly
- We generate a repository interface for each domain class.
- We generate a default EF Code first repository implementation for each domain class.
- The DbContext also needs to reference every class so we also generate that.
- We also have a set of core classes to support:
- Dependency injection of DBInitializers http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx
- Managing DbContext lifecycle in a unit of work pattern