I typically create an interface that exposes the implementation methods. Then inherit the interface in a wrapper that invokes the implementation, and reference the shared interfaces from the client. Then I distribute the assembly with the shared interface (and the db generic assembly) to the client.