Hi guys
The project looks good, but I think once its popularity grows to attract bigger clients the database side will become a problem.
And I am afraid Entity Framework will make it difficult to improve performance and add nice features.
I think it's a mistake to include [indirect] dependency on EF into repository interfaces (e.g. IQueryable<T> IRepository<T>.Table).
In reality efficient queries cannot [always] be reliably generated automatically.
Also, EF does not make it too easy to take over and do a sensitive operation manually.
I would personally:
- remove dependency on any LINQ provider from repository interfaces
- implement alternative database layer (repositories) with NHibernate, making use of stored procedures when necessary
- likely, develop db layer versions specific to major database brands, starting from SQL Server; NHibernate allows to generate queries automatically (I think it does it even better than EF), but things like CTEs and full-text queries are not generated automatically as far as I know; alternatively, it may be possible to push vendor-specific stuff into stored procedures and provide single database layer working with SPs.
The above would require a change in db development approach. Code-first (e.g. when database objects are generated automatically) provides insufficient control and is suitable for small-scale/simple projects only. SQL should be first class citizen. I tried this approach before and it payed off with interest.
Full text search is very important I believe.
I will start doing this for my own sake, but if there's an interest would be happy to contribute.