protected BaseRepository(ProfileLocationContext context, Expression <Func <TEntity, object> > idSelector) { if (context == null) { throw new ArgumentNullException("DbContext cannot be null"); } _entityName = typeof(TEntity).Name; ProfileLocationContext = context; var prop = PropertyInfoHelper.GetPropertyInfo <TEntity>(idSelector); EntityIDSelector = idSelector; GetEntityValue = entity => prop.GetValue(entity); var key = context.Model.FindEntityType(typeof(TEntity)).FindPrimaryKey(); if (key.Properties.Count != 1) { throw new NotSupportedException($"Model {_entityName} missing primary key or has composite key"); } _isAutoGenerated = key.Properties.First().ValueGenerated != ValueGenerated.Never; if (_mapper == null) { _mapper = new MapperConfiguration(cfg => { //TODO Investigate Nested Classes with automapper cfg.ShouldMapProperty = p => !((p.GetGetMethod().IsVirtual) || (p.PropertyType.IsGenericType && typeof(IEnumerable).IsAssignableFrom(p.PropertyType.GetGenericTypeDefinition()))); var mapper = cfg.CreateMap <TEntity, TEntity>(); mapper.ForAllMembers(opts => opts.Condition((src, dest, srcmember, o, rc) => { if (srcmember == null) { return(false); } var defaultVal = srcmember.GetType().IsValueType ? Activator.CreateInstance(srcmember.GetType()) : null; if (srcmember.Equals(defaultVal)) { return(false); } return(true); })); }) .CreateMapper(); } Debug.WriteLine($"DBContext: {context.GetHashCode()} - {_entityName}Repository"); }
public static void AddProfileLocationConfig(this IServiceCollection services, IWebHostEnvironment environment, IConfiguration configuration) { services.AddTransient(s => { var opt = new DbContextOptionsBuilder <ProfileLocationContextEF>(); if (environment.EnvironmentName == "Testing") { // Add In Memory Datatabase for unit test opt.UseInMemoryDatabase("TestingProfileLocation"); } else { opt.UseSqlServer(configuration.GetConnectionString("ProfileLocationDatabase")); opt.UseLazyLoadingProxies(); } var ctx = new ProfileLocationContext(opt.Options); return(ctx); }); // Add ProfileLocationUserContext services.AddScoped(ctx => { var claimsPrincipal = ctx.GetService <ClaimsPrincipal>(); return((IUserContext) new UserContextModel() { Username = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value, DisplayName = claimsPrincipal.FindFirst("name").Value, ApplicationID = Convert.ToInt32(claimsPrincipal.FindFirst("appid").Value), UserID = Convert.ToInt32(claimsPrincipal.FindFirst("uid").Value), Roles = claimsPrincipal.FindAll(ClaimTypes.Role)?.Select(s => s.Value).ToArray(), Scopes = claimsPrincipal.FindAll("scope")?.Select(s => s.Value).ToArray(), }); }); //Entity Repositories #region Repositories services.AddTransient(typeof(IRepository <Group>), typeof(ProfileLocation.Data.EF.Repositories.GroupRepository)); services.AddTransient(typeof(IRepository <Location>), typeof(ProfileLocation.Data.EF.Repositories.LocationRepository)); services.AddTransient(typeof(IRepository <Profile>), typeof(ProfileLocation.Data.EF.Repositories.ProfileRepository)); services.AddTransient(typeof(IRepository <ProfileGroup>), typeof(ProfileLocation.Data.EF.Repositories.ProfileGroupRepository)); services.AddTransient(typeof(IRepository <Social>), typeof(ProfileLocation.Data.EF.Repositories.SocialRepository)); services.AddTransient(typeof(IRepository <SocialType>), typeof(ProfileLocation.Data.EF.Repositories.SocialTypeRepository)); #endregion //Register All Entity Types #region Group services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.GroupType)); services.AddSingleton(typeof(PagedListType <ProfileLocation.Domain.ORM.Models.Group, ProfileLocation.WebAPI.Models.GraphQL.GroupType>)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Search.GroupSearchType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Input.GroupInputType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.GroupEnumType)); services.AddSingleton(typeof(SortOrderType <ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.GroupEnumType>)); GraphTypeTypeRegistry.Register <ProfileLocation.Domain.ORM.Models.Group, ProfileLocation.WebAPI.Models.GraphQL.GroupType>(); #endregion #region Location services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.LocationType)); services.AddSingleton(typeof(PagedListType <ProfileLocation.Domain.ORM.Models.Location, ProfileLocation.WebAPI.Models.GraphQL.LocationType>)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Search.LocationSearchType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Input.LocationInputType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.LocationEnumType)); services.AddSingleton(typeof(SortOrderType <ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.LocationEnumType>)); GraphTypeTypeRegistry.Register <ProfileLocation.Domain.ORM.Models.Location, ProfileLocation.WebAPI.Models.GraphQL.LocationType>(); #endregion #region Profile services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.ProfileType)); services.AddSingleton(typeof(PagedListType <ProfileLocation.Domain.ORM.Models.Profile, ProfileLocation.WebAPI.Models.GraphQL.ProfileType>)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Search.ProfileSearchType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Input.ProfileInputType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.ProfileEnumType)); services.AddSingleton(typeof(SortOrderType <ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.ProfileEnumType>)); GraphTypeTypeRegistry.Register <ProfileLocation.Domain.ORM.Models.Profile, ProfileLocation.WebAPI.Models.GraphQL.ProfileType>(); #endregion #region ProfileGroup services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.ProfileGroupType)); services.AddSingleton(typeof(PagedListType <ProfileLocation.Domain.ORM.Models.ProfileGroup, ProfileLocation.WebAPI.Models.GraphQL.ProfileGroupType>)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Search.ProfileGroupSearchType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Input.ProfileGroupInputType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.ProfileGroupEnumType)); services.AddSingleton(typeof(SortOrderType <ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.ProfileGroupEnumType>)); GraphTypeTypeRegistry.Register <ProfileLocation.Domain.ORM.Models.ProfileGroup, ProfileLocation.WebAPI.Models.GraphQL.ProfileGroupType>(); #endregion #region Social services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.SocialType)); services.AddSingleton(typeof(PagedListType <ProfileLocation.Domain.ORM.Models.Social, ProfileLocation.WebAPI.Models.GraphQL.SocialType>)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Search.SocialSearchType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Input.SocialInputType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.SocialEnumType)); services.AddSingleton(typeof(SortOrderType <ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.SocialEnumType>)); GraphTypeTypeRegistry.Register <ProfileLocation.Domain.ORM.Models.Social, ProfileLocation.WebAPI.Models.GraphQL.SocialType>(); #endregion #region SocialType services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.SocialTypeType)); services.AddSingleton(typeof(PagedListType <ProfileLocation.Domain.ORM.Models.SocialType, ProfileLocation.WebAPI.Models.GraphQL.SocialTypeType>)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Search.SocialTypeSearchType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.Input.SocialTypeInputType)); services.AddSingleton(typeof(ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.SocialTypeEnumType)); services.AddSingleton(typeof(SortOrderType <ProfileLocation.WebAPI.Models.GraphQL.EntityFieldEnums.SocialTypeEnumType>)); GraphTypeTypeRegistry.Register <ProfileLocation.Domain.ORM.Models.SocialType, ProfileLocation.WebAPI.Models.GraphQL.SocialTypeType>(); #endregion services.AddSingleton <ProfileLocationSubscriptions>(); var mutations = new ProfileLocationMutations(environment); services.AddSingleton <ProfileLocationMutations>(mutations); var query = new ProfileLocationQuery(); services.AddSingleton <ProfileLocationQuery>(query); var entityObjectEventService = new EntityObjectEventService(); services.AddSingleton <IEntityObjectEventService>(ctx => entityObjectEventService); RegisterTriggers(entityObjectEventService); RegisterManagers(services, query, mutations); services.AddSingleton <ProfileLocationSchema>(); }
public ProfileGroupRepository(ProfileLocationContext context, ILogManager logManager = null) : base(context, x => x.Id, logManager) { }
protected BaseRepository(ProfileLocationContext context, Expression <Func <TEntity, object> > idSelector, ILogManager logManager) : this(context, idSelector) { Logger = logManager; }
public SocialTypeRepository(ProfileLocationContext context, ILogManager logManager = null) : base(context, x => x.Id, logManager) { }