DbSet.Cast<TEntity>() Error: Cannot create a DbSet<IEntity> from a non-generic DbSet for objects of type 'Entity'
For this, I would actually suggest using reflection. In the constructor of your DbContext, you can set a property to the function pointer:
method = this.GetType().GetMethod("Set", new Type[0]).MakeGenericMethod(typeof(UserImplementation));
You can then invoke this using:
method.Invoke(this, new object[0]);
And this should return an object of type DbSet<UserImplementation>
which the .Cast<>() method can then be invoked on.
replace
nonGeneric.Cast<IUser>();
by
Enumerable.Cast<IUser>(nonGeneric);