namespace Test.DataAccess { public partial class PersonEntities { private static readonly object s_objSync = new object(); private static readonly string UOW_DATACONTEXT_KEY = "PersonEntities_UserInstance"; private static string s_connectionString; /// /// Uses a UnitOfWorkStore to return the same instance of PersonEntities, that is unique /// per user, per postback (or CallContext, if not in an HttpContext environment, such as unit tests or console apps) /// public static PersonEntities Instance { get { // Dirty (non thread-safe) check if (UnitOfWorkStore.GetData(UOW_DATACONTEXT_KEY) == null) { lock (s_objSync) { // Thread-safe check if (UnitOfWorkStore.GetData(UOW_DATACONTEXT_KEY) == null) { PersonEntities context = new PersonEntities(); s_connectionString = context.Connection.ConnectionString; UnitOfWorkStore.SetData(UOW_DATACONTEXT_KEY, context); } } } return (PersonEntities)UnitOfWorkStore.GetData(UOW_DATACONTEXT_KEY); } /* // This could be used if we wanted to add a method that disposed the current DataContext, and created a new one. private set { UnitOfWorkStore.SetData(UOW_DATACONTEXT_KEY, value); } */ } public static string ConnectionString { get { return s_connectionString; } } } }