コード例 #1
0
ファイル: DbAggregator.cs プロジェクト: mattvolp/DrivenDb
        private static void WriteAggregatesOfSameType(IDbAccessorSlim accessor, IEnumerable <IDbAggregate> aggregates)
        {
            var primaryGetter = UpdatePrimaries(accessor, aggregates);

            UpdateForeigns(accessor, aggregates, primaryGetter);
            UpdateAggregates(accessor, aggregates);
        }
コード例 #2
0
ファイル: DbAggregator.cs プロジェクト: mattvolp/DrivenDb
        private static MethodInfo UpdatePrimaries(IDbAccessorSlim accessor, IEnumerable <IDbAggregate> aggregates)
        {
            var primaryGetter = GetPrimaryGetter(aggregates.First().GetType());
            var primaries     = aggregates.Select(a => primaryGetter.Invoke(a, null))
                                .Where(p => p != null)
                                .Cast <IDbEntity>()
                                .ToArray();

            accessor.WriteEntities(primaries);

            return(primaryGetter);
        }
コード例 #3
0
ファイル: DbAggregator.cs プロジェクト: mattvolp/DrivenDb
        private static void UpdateAggregates(IDbAccessorSlim accessor, IEnumerable <IDbAggregate> aggregates)
        {
            //var aggregateProperties = GetAggregateProperties(aggregates.First().GetType());
            //var aggregateTypes = aggregates
            //   .SelectMany(a => aggregateProperties.Select(p => p.Item2.Invoke(a, null)))
            //   .ToLookup(a => a.GetType());

            //foreach (var aggregateType in aggregateTypes)
            //{
            //   var primaryGetter = GetPrimaryGetter(aggregateType.First().GetType());

            //   foreach (var aggregate in aggregates)
            //   {
            //      var foreignPrimary = primaryGetter.Invoke(aggregate, null);
            //      var mappings = GetForeignMappings()

            //      foreach (var aggregateProperty in aggregateProperties)
            //      {
            //         UpdateForeign(aggregate, foreignPrimary, mappings);
            //      }
            //   }
            //}
        }
コード例 #4
0
ファイル: DbAggregator.cs プロジェクト: mattvolp/DrivenDb
        private static void UpdateForeigns(IDbAccessorSlim accessor, IEnumerable <IDbAggregate> aggregates, MethodInfo primaryGetter)
        {
            var foreignProperties = GetForeignProperties(aggregates.First().GetType());
            var foreigns          = new List <IDbEntity>();

            foreach (var aggregate in aggregates)
            {
                var primary = primaryGetter.Invoke(aggregate, null);

                foreach (var foreignProperty in foreignProperties)
                {
                    var mappings          = GetForeignMappings(foreignProperty.Item1);
                    var foreignObject     = foreignProperty.Item2.Invoke(aggregate, null);
                    var foreignEnumerable = foreignObject as IEnumerable;

                    if (foreignEnumerable != null)
                    {
                        foreach (var foreign in foreignEnumerable)
                        {
                            UpdateForeign(primary, (IDbEntity)foreign, mappings);

                            foreigns.Add((IDbEntity)foreign);
                        }
                    }
                    else
                    {
                        var foreign = (IDbEntity)foreignObject;

                        UpdateForeign(primary, foreign, mappings);

                        foreigns.Add(foreign);
                    }
                }
            }

            accessor.WriteEntities(foreigns);
        }
コード例 #5
0
 public FallbackAccessorSlim(IDbAccessorSlim accessor)
 {
     m_Accessor = accessor;
 }