/// <summary> /// Construtor padrão. /// </summary> /// <param name="name"></param> /// <param name="parentPropertyName"></param> /// <param name="conditional"></param> /// <param name="isLoadLazy">Identifica se a referência terá carga tardia.</param> /// <param name="options">Opções de carga da referência.</param> /// <param name="savePriority">Prioridade para salvar a referência.</param> /// <param name="watchedProperties"></param> public EntityLoaderReference(string name, string parentPropertyName, ConditionalLoader conditional, bool isLoadLazy, LoadOptions options, EntityChildSavePriority savePriority, string[] watchedProperties) { _name = name; _parentPropertyName = parentPropertyName; _watchedPropertyNames = watchedProperties; _conditional = conditional; _isLoadLazy = isLoadLazy; _options = options; _savePriority = savePriority; }
/// <summary> /// Inicializa a instancia. /// </summary> /// <param name="name">Nome do link.</param> /// <param name="childName">Nome do filho associado com o link.</param> /// <param name="linkParentForeignKeySetter"></param> /// <param name="linkParentForeignKeyGetter">Instancia usada para recuperar o valor da chave do pai do link.</param> /// <param name="childKeyGetter">Instancia usada para recuperar o valor da chave do filho que está no link.</param> /// <param name="parentValueGetter"></param> /// <param name="parentValueSetter"></param> /// <param name="foreignProperty"></param> /// <param name="childProperty">Dados da propriedade do link usada para associa-lo com filho.</param> /// <param name="linkCreator">Func usada para criar uma instancia do link associado com entidade do filho associado.</param> /// <param name="entityFromLinkCreator">Func usada para criar uma instancia do filho baseado na entidade do link.</param> /// <param name="isSingle"></param> /// <param name="options">Opções de carga do link.</param> /// <param name="savePriority"></param> protected void Initialize(string name, string childName, Action <IEntity, IEntity> linkParentForeignKeySetter, Func <Colosoft.Data.IModel, int> linkParentForeignKeyGetter, Func <Colosoft.Data.IModel, int> childKeyGetter, Func <IEntity, IEntity> parentValueGetter, Action <IEntity, IEntity> parentValueSetter, System.Reflection.PropertyInfo foreignProperty, System.Reflection.PropertyInfo childProperty, LinkCreatorHandler linkCreator, EntityFromLinkCreatorHandler entityFromLinkCreator, bool isSingle, LoadOptions options = LoadOptions.None, EntityChildSavePriority savePriority = EntityChildSavePriority.AfterEntity) { _name = name; _childName = childName; _foreignPropertyName = foreignProperty.Name; _childPropertyName = childProperty.Name; _options = options; _linkParentForeignKeySetter = linkParentForeignKeySetter; _linkParentForeignKeyGetter = linkParentForeignKeyGetter; _childKeyGetter = childKeyGetter; _parentValueGetter = parentValueGetter; _parentValueSetter = parentValueSetter; _entityFromLinkCreator = entityFromLinkCreator; _linkCreator = linkCreator; _isSingle = isSingle; _savePriority = savePriority; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="name">Nome do filho.</param> /// <param name="propertyName">Nome da propriedade do filho na entidade.</param> /// <param name="parentUidSetter">Delegate usado para define o identificador unico do pai.</param> /// <param name="parentUidGetter">Delegate usado para recupera o identificador unico do pai.</param> /// <param name="parentValueGetter">Delegate usado para recuperar o valor do pai.</param> /// <param name="parentValueSetter">Delegate usado para definir o valor do pai.</param> /// <param name="foreignProperty">Propriedade de associação.</param> /// <param name="parentLoader">Instancia do loader associado.</param> /// <param name="conditional">Condicional para ser usado na carga.</param> /// <param name="isSingle">Identifica que é um filho unico.</param> /// <param name="options">Opções de carga.</param> /// <param name="savePriority">Prioridade para salvar o filho.</param> protected EntityLoaderChildInfo(string name, string propertyName, Action <IEntity, IEntity> parentUidSetter, Func <Colosoft.Data.IModel, int> parentUidGetter, Func <IEntity, IEntity> parentValueGetter, Action <IEntity, IEntity> parentValueSetter, System.Reflection.PropertyInfo foreignProperty, ConditionalLoader conditional, IEntityLoader parentLoader, bool isSingle, LoadOptions options = LoadOptions.None, EntityChildSavePriority savePriority = EntityChildSavePriority.AfterEntity) { propertyName.Require("propertyName").NotNull().NotEmpty(); _name = name; _propertyName = propertyName; _parentLoader = parentLoader; _foreignPropertyName = foreignProperty.Name; _parentUidSetter = parentUidSetter; _parentUidGetter = parentUidGetter ?? _parentLoader.GetInstanceUid; _parentValueGetter = parentValueGetter; _parentValueSetter = parentValueSetter; _options = options; _parentUidSetter2 = (parent, child) => { if (_parentUidGetter == null) { throw new InvalidOperationException("ParentUidGetter undefined"); } foreignProperty.SetValue(child, _parentUidGetter(parent), null); }; _conditional = conditional; _isSingle = isSingle; _savePriority = savePriority; }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="name">Nome da referencia.</param> /// <param name="parentProperty">Propriedade do pai onde a referencia está.</param> /// <param name="conditional">Condicional para carregar a referencia.</param> /// <param name="isLoadLazy">Identifica se a referência terá carga tardia.</param> /// <param name="options">Opções de carga da referência.</param> /// <param name="savePriority"></param> /// <param name="watchedProperties">Propriedade que serão monitoradas.</param> public EntityLoaderReference(string name, System.Linq.Expressions.Expression <Func <TParentEntity, IEntity> > parentProperty, ConditionalLoader conditional, bool isLoadLazy, LoadOptions options, EntityChildSavePriority savePriority, System.Linq.Expressions.Expression <Func <TParentModel, object> >[] watchedProperties) : base(name, GetParentPropertyName(parentProperty), conditional, isLoadLazy, options, savePriority, GetwatchedPropertyNames(watchedProperties)) { _parentValueGetter = f => parentProperty.Compile()((TParentEntity)f); }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="name">Nome do filho.</param> /// <param name="parentProperty">Propriedade que será definida para o pai.</param> /// <param name="parentPropertyUid">Propriedade que será usada para recuepra o identificador unico do pai.</param> /// <param name="foreignProperty">Propriedade que será usada como chave estrangeira.</param> /// <param name="conditional">Condicional que será usado na carga.</param> /// <param name="parentLoader">Instancia do loader associado.</param> /// <param name="isSingle">Identifica se é um filho unico.</param> /// <param name="options">Opções de carga.</param> /// <param name="savePriority">Prioridade para salvar o filho</param> public EntityLoaderChildInfo(string name, System.Linq.Expressions.Expression <Func <TParentEntity, IEntity> > parentProperty, System.Linq.Expressions.Expression <Func <TParentModel, int> > parentPropertyUid, System.Linq.Expressions.Expression <Func <TModel, int> > foreignProperty, ConditionalLoader conditional, IEntityLoader parentLoader, bool isSingle, LoadOptions options, EntityChildSavePriority savePriority) : base(name, parentProperty.GetMember().Name, GetParentUidSetter2(parentPropertyUid, foreignProperty), GetParentUidGetter(parentPropertyUid), f => parentProperty.Compile()((TParentEntity)f), GetParentValueSetter(parentProperty), foreignProperty.GetMember() as System.Reflection.PropertyInfo, conditional, parentLoader, isSingle, options, savePriority) { }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="name">Nome do link.</param> /// <param name="childName">Nome do pai associado.</param> /// <param name="parentProperty">Propriedade da entidade pai na qual o link será definido.</param> /// <param name="childForeignProperty">Propriedade do filho da entidade na qual o link está associado.</param> /// <param name="childProperty">Propriedade do link que faz associação com o filho.</param> /// <param name="isSingle">Identifica se é um filho simples.</param> /// <param name="options">Opções de carga.</param> /// <param name="savePriority"></param> public EntityLoaderLinkInfo(string name, string childName, System.Linq.Expressions.Expression <Func <TParentEntity, IEntity> > parentProperty, System.Linq.Expressions.Expression <Func <TLinkParentDataModel, int?> > childForeignProperty, System.Linq.Expressions.Expression <Func <TLinkDataModel, int> > childProperty, bool isSingle, LoadOptions options, EntityChildSavePriority savePriority) { _foreignPropertyNullable = childForeignProperty; _childProperty = childProperty; _parentProperty = parentProperty; Initialize(name, childName, SetLinkParentForeignKeyNullable, GetLinkParentForeignKeyNullable, GetChildKey, GetParentValue, GetParentValueSetter(parentProperty), GetForeignPropertyInfo(), GetChildPropertyInfo(), CreateLink, CreateEntityFromLink, isSingle, options, savePriority); }