In many apps tables containing ID’s and names for a domain – guess they are called domain tables – needs to be cached in the biz layer.
In web apps the caching procedure is well documented and implemented in System.Web.Caching. Cache is a thread-safe object, that doesn’t requires explicit locking.
In non-web apps then what to do?
This article suggests to use LINQ over self-hosted WCF.