///<summary> /// Sets custom mappings for this XmlRepository instance. ///</summary> ///<param name="propertyMappings">The property mappings to use.</param> ///<returns>The repository modifier for further modification.</returns> public IRepositoryModifier <TEntity, TIdentity> WithMappings(IDictionary <Type, IList <IPropertyMapping> > propertyMappings) { XmlRepository.AddDefaultPropertyMappingsFor(typeof(TEntity), propertyMappings); this.PropertyMappings = propertyMappings; return(this); }
internal static void AddRepositoryKey <TEntity, TIdentity>(XmlRepository <TEntity, TIdentity> repository) where TEntity : class, new() { var newKey = GetRepositoryKeyFromInstance(repository); repository.Key = newKey; Repositories.Add(newKey, repository); }
/// <summary> /// Gets an xml repository for the specified entity type. If the repository has not been /// created yet, a new one is created; otherwise, the existing one is returned. /// e.g. RepositoryFor{Test}.WithIdentity(p => p.Name) for a entity named 'Test' and a identity property named 'Name' which is typed as string. /// </summary> /// <typeparam name="TEntity">The entity type.</typeparam> /// <typeparam name="TIdentity">The identity type.</typeparam> /// <param name="repositoryModifier">The selector for entity type and identity type.</param> /// <returns>An xml repository.</returns> public static IXmlRepository <TEntity, TIdentity> Get <TEntity, TIdentity>(IRepositoryModifier <TEntity, TIdentity> repositoryModifier) where TEntity : class, new() { lock (LockObject) { var key = new RepositoryKey { RepositoryType = typeof(IXmlRepository <TEntity, TIdentity>), DataProvider = repositoryModifier.DataProvider ?? DataProvider, PropertyMappings = repositoryModifier.PropertyMappings ?? PropertyMappings, QueryProperty = repositoryModifier.QueryProperty }; IXmlRepository <TEntity, TIdentity> repository; if (!Repositories.ContainsKey(key)) { repository = new XmlRepository <TEntity, TIdentity>(repositoryModifier); repository.Key = key; Repositories.Add(key, repository); // Add default mappings. if (repositoryModifier.PropertyMappings != null) { AddDefaultPropertyMappingsFor(typeof(TEntity), repositoryModifier.PropertyMappings); } { AddDefaultPropertyMappingsFor(typeof(TEntity)); } } else { repository = Repositories[key] as IXmlRepository <TEntity, TIdentity>; } // Return the requested repository to the caller. return(repository); } }
private static RepositoryKey GetRepositoryKeyFromInstance <TEntity, TIdentity>(XmlRepository <TEntity, TIdentity> repository) where TEntity : class, new() { return(new RepositoryKey { RepositoryType = repository.GetType(), DataProvider = repository.DataProvider ?? DataProvider, PropertyMappings = repository.PropertyMappings ?? PropertyMappings, QueryProperty = repository.DefaultQueryProperty }); }
internal static void RemoveRepositoryKey <TEntity, TIdentity>(XmlRepository <TEntity, TIdentity> repository) where TEntity : class, new() { Repositories.Remove(repository.Key); }