Пример #1
0
        public virtual void Repro3101_coalesce_tracking()
        {
            CreateDatabase3101();

            var loggingFactory  = new TestSqlLoggerFactory();
            var serviceProvider = new ServiceCollection()
                                  .AddEntityFrameworkSqlServer()
                                  .AddSingleton <ILoggerFactory>(loggingFactory)
                                  .BuildServiceProvider();

            using (var ctx = new MyContext3101(serviceProvider))
            {
                var query = from eVersion in ctx.Entities
                            join eRoot in ctx.Entities
                            on eVersion.RootEntityId equals(int?) eRoot.Id
                            into RootEntities
                            from eRootJoined in RootEntities.DefaultIfEmpty()
                            select new { eRootJoined, eVersion, foo = eRootJoined ?? eVersion };

                var result = query.ToList();

                var foo = ctx.ChangeTracker.Entries().ToList();
                Assert.True(ctx.ChangeTracker.Entries().Count() > 0);
            }
        }
Пример #2
0
        public bool Load(Dictionary <TKey, TEntity> entities)
        {
            _masterDict.Clear();
            RootEntities.Clear();

            foreach (var kvp in entities)
            {
                if (!_masterDict.ContainsKey(kvp.Key))
                {
                    _masterDict.Add(kvp.Key, kvp.Value);
                }

                if (kvp.Value.Parent == null)
                {
                    RootEntities.Add(kvp.Value);
                }
            }

            // check for loops
            var curPath = new List <TKey>();

            foreach (var kvp in _masterDict)
            {
                curPath.Clear();
                var curEntity = kvp.Value;

                while (curEntity.Parent != null)
                {
                    if (!curPath.Any(x => _keyComparer.Equals(x, curEntity.Key)))
                    {
                        curPath.Add(curEntity.Key);
                        curEntity = curEntity.Parent;

                        continue;
                    }

                    Logger?.Error("Loop detected for entity '{0}' (key: {1}) at '{2}' (key: {3})",
                                  new object[]
                    {
                        kvp.Value.DisplayName, kvp.Key, curEntity.DisplayName, curEntity.Key
                    });

                    return(false);
                }
            }

            return(true);
        }
Пример #3
0
        public virtual void Repro3101_simple_coalesce1()
        {
            using (CreateScratch <MyContext3101>(Seed3101))
            {
                using (var ctx = new MyContext3101())
                {
                    var query = from eVersion in ctx.Entities
                                join eRoot in ctx.Entities.Include(e => e.Children).AsNoTracking()
                                on eVersion.RootEntityId equals(int?) eRoot.Id
                                into RootEntities
                                from eRootJoined in RootEntities.DefaultIfEmpty()
                                select eRootJoined ?? eVersion;

                    var result = query.ToList();
                }
            }
        }
Пример #4
0
        public virtual void Repro3101_conditional()
        {
            using (CreateScratch <MyContext3101>(Seed3101))
            {
                using (var ctx = new MyContext3101())
                {
                    var query = from eVersion in ctx.Entities.Include(e => e.Children)
                                join eRoot in ctx.Entities
                                on eVersion.RootEntityId equals(int?) eRoot.Id
                                into RootEntities
                                from eRootJoined in RootEntities.DefaultIfEmpty()
                                select eRootJoined != null ? eRootJoined : eVersion;

                    var result = query.ToList();
                    Assert.True(result.All(e => e.Children.Count > 0));
                }
            }
        }
Пример #5
0
        public virtual void Repro3101_nested_coalesce2()
        {
            using (CreateScratch <MyContext3101>(Seed3101))
            {
                using (var ctx = new MyContext3101())
                {
                    var query = from eVersion in ctx.Entities.Include(e => e.Children)
                                join eRoot in ctx.Entities
                                on eVersion.RootEntityId equals(int?) eRoot.Id
                                into RootEntities
                                from eRootJoined in RootEntities.DefaultIfEmpty()
                                select new { One = eRootJoined, Two = 2, Coalesce = eRootJoined ?? (eVersion ?? eRootJoined) };

                    var result = query.ToList();
                    Assert.True(result.All(e => e.Coalesce.Children.Count > 0));
                }
            }
        }
Пример #6
0
        public virtual void Repro3101_complex_coalesce2()
        {
            using (CreateScratch <MyContext3101>(Seed3101))
            {
                using (var ctx = new MyContext3101())
                {
                    var query = from eVersion in ctx.Entities
                                join eRoot in ctx.Entities.Include(e => e.Children)
                                on eVersion.RootEntityId equals(int?) eRoot.Id
                                into RootEntities
                                from eRootJoined in RootEntities.DefaultIfEmpty()
                                select new { Root = eRootJoined, Coalesce = eRootJoined ?? eVersion };

                    var result = query.ToList();
                    Assert.Equal(2, result.Count(e => e.Coalesce.Children.Count > 0));
                }
            }
        }
Пример #7
0
        public virtual void Repro3101_coalesce_tracking()
        {
            using (CreateScratch <MyContext3101>(Seed3101))
            {
                using (var ctx = new MyContext3101())
                {
                    var query = from eVersion in ctx.Entities
                                join eRoot in ctx.Entities
                                on eVersion.RootEntityId equals(int?) eRoot.Id
                                into RootEntities
                                from eRootJoined in RootEntities.DefaultIfEmpty()
                                select new { eRootJoined, eVersion, foo = eRootJoined ?? eVersion };

                    var result = query.ToList();

                    Assert.True(ctx.ChangeTracker.Entries().Any());
                }
            }
        }
Пример #8
0
        public virtual void Repro3101_conditional()
        {
            CreateDatabase3101();

            var loggingFactory  = new TestSqlLoggerFactory();
            var serviceProvider = new ServiceCollection()
                                  .AddEntityFrameworkSqlServer()
                                  .AddSingleton <ILoggerFactory>(loggingFactory)
                                  .BuildServiceProvider();

            using (var ctx = new MyContext3101(serviceProvider))
            {
                var query = from eVersion in ctx.Entities.Include(e => e.Children)
                            join eRoot in ctx.Entities
                            on eVersion.RootEntityId equals(int?) eRoot.Id
                            into RootEntities
                            from eRootJoined in RootEntities.DefaultIfEmpty()
                            select eRootJoined != null ? eRootJoined : eVersion;

                var result = query.ToList();
                Assert.True(result.All(e => e.Children.Count > 0));
            }
        }
Пример #9
0
        public virtual void Repro3101_nested_coalesce1()
        {
            CreateDatabase3101();

            var loggingFactory  = new TestSqlLoggerFactory();
            var serviceProvider = new ServiceCollection()
                                  .AddEntityFrameworkSqlServer()
                                  .AddSingleton <ILoggerFactory>(loggingFactory)
                                  .BuildServiceProvider();

            using (var ctx = new MyContext3101(serviceProvider))
            {
                var query = from eVersion in ctx.Entities
                            join eRoot in ctx.Entities.Include(e => e.Children)
                            on eVersion.RootEntityId equals(int?) eRoot.Id
                            into RootEntities
                            from eRootJoined in RootEntities.DefaultIfEmpty()
                            select new { One = 1, Coalesce = eRootJoined ?? (eVersion ?? eRootJoined) };

                var result = query.ToList();
                Assert.Equal(2, result.Count(e => e.Coalesce.Children.Count > 0));
            }
        }
 public virtual bool IsEntity(System.Type type)
 {
     return(RootEntities.Contains(type) || type.GetBaseTypes().Any(t => RootEntities.Contains(t)) || HasDelayedEntityRegistration(type));
 }
 public override bool IsRootEntity(System.Type type)
 {
     return(RootEntities.Contains(type));
 }
Пример #12
0
 public bool IsDeclaredEntity(System.Type type)
 {
     return(RootEntities.Contains(type) || HasDelayedEntityRegistration(type));
 }