コード例 #1
0
        private static Relation _ReadRelation(NetBuffer buffer)
        {
            RelationFlags flags = (RelationFlags)buffer.ReadByte();
            int           value = (flags != RelationFlags.Any) ? buffer.ReadInt32() : 0;

            return(new Relation(flags, value));
        }
コード例 #2
0
ファイル: QueryTests.cs プロジェクト: Raimusoft/FoxDb
        public void OffsetWithLimit(RelationFlags flags)
        {
            var relation = this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set      = this.Database.Set <Test002>(this.Transaction);
            var data     = new List <Test002>();

            set.Clear();
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            for (var a = 0; a < data.Count; a++)
            {
                set.Fetch.Source.GetTable(set.Table).Filter.With(filter =>
                {
                    filter.Limit  = 1;
                    filter.Offset = a;
                });
                this.AssertSequence(new[] { data[a] }, set);
            }
        }
コード例 #3
0
ファイル: Extensions.cs プロジェクト: Raimusoft/FoxDb
 public static RelationFlags EnsureMultiplicity(this RelationFlags flags, RelationFlags multiplicity)
 {
     if (flags.GetMultiplicity() != RelationFlags.None)
     {
         return(flags);
     }
     return(flags | multiplicity);
 }
コード例 #4
0
ファイル: Utils.cs プロジェクト: t5w0rd/craft
    public static bool CanBeTargetedAt(Unit unit, Unit target, RelationFlags targetRelation)
    {
        int force       = unit.GetIntProperty(PropertyType.BattleForce);
        int allyMask    = unit.GetIntProperty(PropertyType.BattleForceAllyMask);
        int targetForce = target.GetIntProperty(PropertyType.BattleForce);

        return((ForceRelation(force, targetForce, allyMask) & targetRelation) != 0);
    }
コード例 #5
0
ファイル: EnumeratorTests.cs プロジェクト: Raimusoft/FoxDb
        public void NToManyTransientEnumerator(RelationFlags flags)
        {
            this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var data = new List <Transient>();

            data.AddRange(new[]
            {
                new Transient()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Transient()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Transient()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            {
                var set = this.Database.Set <Test002>(this.Transaction);
                set.AddOrUpdate(data);
            }
            {
                var set = this.Database.Set <Transient>(this.Database.Source(this.Database.Config.Table <Test002>().CreateProxy <Transient>(), this.Transaction));
                this.AssertSequence(data, set);
                Assert.AreEqual(new Transient(), set.Create());
            }
        }
コード例 #6
0
 protected RelationConfig(IConfig config, RelationFlags flags, string identifier, ITableConfig leftTable, IMappingTableConfig mappingTable, ITableConfig rightTable)
     : this(config)
 {
     this.Flags        = flags;
     this.Identifier   = identifier;
     this.LeftTable    = leftTable;
     this.MappingTable = mappingTable;
     this.RightTable   = rightTable;
 }
コード例 #7
0
        public void FindNToManyRelation(RelationFlags flags)
        {
            this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set  = this.Database.Set <Test002>(this.Transaction);
            var data = new List <Test002>();

            set.Clear();
            this.AssertSequence(data, set);
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            var retrieved = set.Find(data[1].Id);

            Assert.AreEqual(data[1], retrieved);
        }
コード例 #8
0
        public void Where_OrderByDescending_FirstOrDefault(RelationFlags flags)
        {
            this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set  = this.Database.Set <Test002>(this.Transaction);
            var data = new List <Test002>();

            set.Clear();
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            var id    = data[0].Id;
            var query = this.Database.AsQueryable <Test002>(this.Transaction);

            this.AssertSequence(new[] { data[2] }, new[] { query.Where(element => element.Id > id).OrderByDescending(element => element.Id).FirstOrDefault() });
        }
コード例 #9
0
        public void IndexerBinding(RelationFlags flags)
        {
            this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set  = this.Database.Set <Test002>(this.Transaction);
            var data = new List <Test002>();

            set.Clear();
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            var query = this.Database.AsQueryable <Test002>(this.Transaction);

            this.AssertSequence(new[] { data[2] }, query.Where(element => element.Id == data[2].Id));
            this.AssertSequence(new[] { data[2] }, query.Where(element => element.Id == data[2].Id && element.Test004.Any(child => child.Id == data[2].Test004.First().Id)));
        }
コード例 #10
0
ファイル: QuirksTests.cs プロジェクト: Raimusoft/FoxDb
        public void NToManyRelationWithInt32Key(RelationFlags flags)
        {
            this.Database.Config.Table <Grapefruit>().Relation(item => item.Pineapples, Defaults.Relation.Flags | flags);
            var set  = this.Database.Set <Grapefruit>(this.Transaction);
            var data = new List <Grapefruit>();

            set.Clear();
            this.AssertSequence(data, set);
            data.AddRange(new[]
            {
                new Grapefruit()
                {
                    Name = "1_1", Pineapples = new List <Pineapple>()
                    {
                        new Pineapple()
                        {
                            Name = "1_2"
                        }, new Pineapple()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Grapefruit()
                {
                    Name = "2_1", Pineapples = new List <Pineapple>()
                    {
                        new Pineapple()
                        {
                            Name = "2_2"
                        }, new Pineapple()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Grapefruit()
                {
                    Name = "3_1", Pineapples = new List <Pineapple>()
                    {
                        new Pineapple()
                        {
                            Name = "3_2"
                        }, new Pineapple()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
        }
コード例 #11
0
ファイル: Extensions.cs プロジェクト: Raimusoft/FoxDb
 public static RelationFlags GetMultiplicity(this RelationFlags flags)
 {
     if (flags.HasFlag(RelationFlags.OneToOne))
     {
         return(RelationFlags.OneToOne);
     }
     else if (flags.HasFlag(RelationFlags.OneToMany))
     {
         return(RelationFlags.OneToMany);
     }
     else if (flags.HasFlag(RelationFlags.ManyToMany))
     {
         return(RelationFlags.ManyToMany);
     }
     return(RelationFlags.None);
 }
コード例 #12
0
ファイル: BulkTests.cs プロジェクト: Raimusoft/FoxDb
        public async Task CanAddUpdateDeleteAsync(RelationFlags flags)
        {
            const int COUNT     = 1024;
            var       stopwatch = new Stopwatch();
            var       relation  = this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var       set       = this.Database.Set <Test002>(this.Transaction);
            var       data      = new List <Test002>();
            await set.ClearAsync().ConfigureAwait(false);

            stopwatch.Start();
            for (var a = 0; a < COUNT; a++)
            {
                await set.AddOrUpdateAsync(new Test002()
                {
                    Name    = "Name_" + a,
                    Test003 = new Test003()
                    {
                        Name = "Name_" + a
                    },
                    Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "Name_" + a
                        },
                        new Test004()
                        {
                            Name = "Name_" + a
                        },
                        new Test004()
                        {
                            Name = "Name_" + a
                        }
                    }
                }).ConfigureAwait(false);
            }
            stopwatch.Stop();
            TestContext.Out.WriteLine("Added {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            Assert.AreEqual(COUNT, await set.CountAsync);
            stopwatch.Stop();
            TestContext.Out.WriteLine("Counted {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            using (var sequence = set.GetAsyncEnumerator())
            {
                while (await sequence.MoveNextAsync().ConfigureAwait(false))
                {
                    sequence.Current.Name         = "updated";
                    sequence.Current.Test003.Name = "updated";
                    sequence.Current.Test004.First().Name = "updated";
                    await set.AddOrUpdateAsync(sequence.Current).ConfigureAwait(false);
                }
            }
            stopwatch.Stop();
            TestContext.Out.WriteLine("Updated {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            using (var sequence = set.GetAsyncEnumerator())
            {
                while (await sequence.MoveNextAsync().ConfigureAwait(false))
                {
                    Assert.AreEqual("updated", sequence.Current.Name);
                    Assert.AreEqual("updated", sequence.Current.Test003.Name);
                    Assert.AreEqual("updated", sequence.Current.Test004.First().Name);
                }
            }
            stopwatch.Stop();
            TestContext.Out.WriteLine("Enumerated {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            await set.ClearAsync().ConfigureAwait(false);

            stopwatch.Stop();
            TestContext.Out.WriteLine("Removed {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            Assert.AreEqual(0, await set.CountAsync);
        }
コード例 #13
0
 public ForeignKeyAttribute(RelationFlags flags)
     : this()
 {
     this.Flags |= flags;
 }
コード例 #14
0
 public OneToManyRelationConfig(IConfig config, RelationFlags flags, string identifier, ITableConfig leftTable, ITableConfig rightTable, IPropertyAccessor <T, ICollection <TRelation> > accessor)
     : base(config, flags, identifier, leftTable, null, rightTable, accessor)
 {
 }
コード例 #15
0
 public Relation(RelationFlags flags, int value)
 {
     this.flags = flags;
     this.value = value;
 }
コード例 #16
0
 public void ContainsCompoundRelation(RelationFlags flags, bool invert)
 {
     this.Database.Config.Table <Test002>().With(table =>
     {
         table.Relation(item => item.Test004, Defaults.Relation.Flags | flags).With(relation =>
         {
             relation.Expression.Left     = relation.Expression.Clone();
             relation.Expression.Operator = relation.Expression.CreateOperator(QueryOperator.OrElse);
             relation.Expression.Right    = relation.CreateConstraint(relation.LeftTable.Column("Test004_Id"), relation.RightTable.PrimaryKey);
         });
     });
     var set  = this.Database.Set <Test002>(this.Transaction);
     var data = new List <Test002>();
     {
         var child = this.Database.Set <Test004>(this.Transaction).AddOrUpdate(new Test004()
         {
             Name = "2_2"
         });
         data.AddRange(new[]
         {
             new Test002()
             {
                 Name = "1_1", Test004 = new List <Test004>()
                 {
                     new Test004()
                     {
                         Name = "1_2"
                     }, new Test004()
                     {
                         Name = "1_3"
                     }
                 }
             },
             new Test002()
             {
                 Name = "2_1"
             },
             new Test002()
             {
                 Name = "3_1", Test004 = new List <Test004>()
                 {
                     new Test004()
                     {
                         Name = "3_2"
                     }, new Test004()
                     {
                         Name = "3_3"
                     }
                 }
             },
         });
         set.AddOrUpdate(data);
         data[1].Test004_Id = child.Id;
         new EntityPersister(this.Database, set.Table, this.Transaction).Update(set.Find(data[1].Id), data[1]);
         data[1].Test004.Add(child);
     }
     {
         var child = data[1].Test004.First();
         var query = this.Database.AsQueryable <Test002>(this.Transaction);
         if (invert)
         {
             this.AssertSequence(new[] { data[0], data[2] }, query.Where(element => !element.Test004.Contains(child)));
         }
         else
         {
             this.AssertSequence(new[] { data[1] }, query.Where(element => element.Test004.Contains(child)));
         }
     }
 }
コード例 #17
0
        public void NToManyRelation(RelationFlags flags)
        {
            this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set  = this.Database.Set <Test002>(this.Transaction);
            var data = new List <Test002>();

            set.Clear();
            this.AssertSequence(data, set);
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            data[1].Test004.First().Name = "updated";
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            data[1].Test004.RemoveRange(data[1].Test004);
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            set.Remove(data[1]);
            data.RemoveAt(1);
            this.AssertSequence(data, set);
        }
コード例 #18
0
ファイル: SimpleTests.cs プロジェクト: Raimusoft/FoxDb
        public void CanAddUpdateDelete_GuidKey(RelationFlags flags)
        {
            this.Database.Config.Table <Test007>().Relation(item => item.Test009, Defaults.Relation.Flags | flags);
            var set  = this.Database.Set <Test007>(this.Transaction);
            var data = new List <Test007>();

            set.Clear();
            this.AssertSequence(data, set);
            data.AddRange(new[]
            {
                new Test007()
                {
                    Name = "1_1", Test009 = new List <Test009>()
                    {
                        new Test009()
                        {
                            Name = "1_2"
                        }, new Test009()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test007()
                {
                    Name = "2_1", Test009 = new List <Test009>()
                    {
                        new Test009()
                        {
                            Name = "2_2"
                        }, new Test009()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test007()
                {
                    Name = "3_1", Test009 = new List <Test009>()
                    {
                        new Test009()
                        {
                            Name = "3_2"
                        }, new Test009()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            data[1].Test009.First().Name = "updated";
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            data[1].Test009.RemoveRange(data[1].Test009);
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            set.Remove(data[1]);
            data.RemoveAt(1);
            this.AssertSequence(data, set);
        }
コード例 #19
0
 public CollectionRelationConfig(IConfig config, RelationFlags flags, string identifier, ITableConfig leftTable, IMappingTableConfig mappingTable, ITableConfig rightTable, IPropertyAccessor <T, ICollection <TRelation> > accessor)
     : base(config, flags, identifier, leftTable, mappingTable, rightTable)
 {
     this.Accessor = accessor;
 }
コード例 #20
0
        public void Contains(RelationFlags flags, bool invert)
        {
            this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set  = this.Database.Set <Test002>(this.Transaction);
            var data = new List <Test002>();

            set.Clear();
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            var child = data[1].Test004.First();
            var query = this.Database.AsQueryable <Test002>(this.Transaction);

            if (invert)
            {
                this.AssertSequence(new[] { data[0], data[2] }, query.Where(element => !element.Test004.Contains(child)));
            }
            else
            {
                this.AssertSequence(new[] { data[1] }, query.Where(element => element.Test004.Contains(child)));
            }
        }
コード例 #21
0
ファイル: QueryTests.cs プロジェクト: Raimusoft/FoxDb
        public void Limit(RelationFlags flags)
        {
            var relation = this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set      = this.Database.Set <Test002>(this.Transaction);
            var data     = new List <Test002>();

            set.Clear();
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            set.Fetch.Source.GetTable(set.Table).Filter.With(filter =>
            {
                filter.Limit = 1;
                filter.Add().With(binary =>
                {
                    binary.Left     = binary.CreateColumn(set.Table.PrimaryKey);
                    binary.Operator = binary.CreateOperator(QueryOperator.Greater);
                    binary.Right    = binary.CreateParameter("Id", DbType.Int64, 0, 0, 0, ParameterDirection.Input, false, null, DatabaseQueryParameterFlags.None);
                });
            });
            for (var a = 0; a < data.Count; a++)
            {
                var id = data[a].Id - 1;
                set.Parameters = (parameters, phase) => parameters["Id"] = id;
                this.AssertSequence(new[] { data.Where(element => element.Id > id).First() }, set);
            }
        }
コード例 #22
0
 public static IRelationSelector <T, ICollection <TRelation> > By(Expression <Func <T, ICollection <TRelation> > > expression, RelationFlags flags)
 {
     return(By(string.Empty, expression, flags));
 }
コード例 #23
0
ファイル: BulkTests.cs プロジェクト: Raimusoft/FoxDb
        public void CanAddUpdateDelete(RelationFlags flags)
        {
            const int COUNT     = 1024;
            var       stopwatch = new Stopwatch();
            var       relation  = this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var       set       = this.Database.Set <Test002>(this.Transaction);
            var       data      = new List <Test002>();

            set.Clear();
            stopwatch.Start();
            for (var a = 0; a < COUNT; a++)
            {
                set.AddOrUpdate(new Test002()
                {
                    Name    = "Name_" + a,
                    Test003 = new Test003()
                    {
                        Name = "Name_" + a
                    },
                    Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "Name_" + a
                        },
                        new Test004()
                        {
                            Name = "Name_" + a
                        },
                        new Test004()
                        {
                            Name = "Name_" + a
                        }
                    }
                });
            }
            stopwatch.Stop();
            TestContext.Out.WriteLine("Added {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            Assert.AreEqual(COUNT, set.Count);
            stopwatch.Stop();
            TestContext.Out.WriteLine("Counted {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            foreach (var element in set)
            {
                element.Name         = "updated";
                element.Test003.Name = "updated";
                element.Test004.First().Name = "updated";
                set.AddOrUpdate(element);
            }
            stopwatch.Stop();
            TestContext.Out.WriteLine("Updated {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            foreach (var element in set)
            {
                Assert.AreEqual("updated", element.Name);
                Assert.AreEqual("updated", element.Test003.Name);
                Assert.AreEqual("updated", element.Test004.First().Name);
            }
            stopwatch.Stop();
            TestContext.Out.WriteLine("Enumerated {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            stopwatch.Start();
            set.Clear();
            stopwatch.Stop();
            TestContext.Out.WriteLine("Removed {0} records: {1:0.00} per second.", COUNT, COUNT / stopwatch.Elapsed.TotalSeconds);
            Assert.AreEqual(0, set.Count);
        }
コード例 #24
0
 public static IRelationSelector <T, ICollection <TRelation> > By(string identifier, Expression <Func <T, ICollection <TRelation> > > expression, RelationFlags flags)
 {
     return(RelationSelector <T, ICollection <TRelation> > .By(identifier, expression, flags));
 }
コード例 #25
0
        public void NToManyCompoundRelation(RelationFlags flags)
        {
            this.Database.Config.Table <Test002>().With(table =>
            {
                table.Relation(item => item.Test004, Defaults.Relation.Flags | flags).With(relation =>
                {
                    relation.Expression.Left     = relation.Expression.Clone();
                    relation.Expression.Operator = relation.Expression.CreateOperator(QueryOperator.OrElse);
                    relation.Expression.Right    = relation.CreateConstraint(relation.LeftTable.Column("Test004_Id"), relation.RightTable.PrimaryKey);
                });
            });
            var set  = this.Database.Set <Test002>(this.Transaction);
            var data = new List <Test002>();

            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            data[1].Test004.Clear();
            set.AddOrUpdate(data);
            this.AssertSequence(data, set);
            var child = this.Database.Set <Test004>(this.Transaction).AddOrUpdate(new Test004()
            {
                Name = "2_2"
            });

            data[1].Test004_Id = child.Id;
            new EntityPersister(this.Database, set.Table, this.Transaction).Update(set.Find(data[1].Id), data[1]);
            data[1].Test004.Add(child);
            this.AssertSequence(data, set);
        }
コード例 #26
0
ファイル: Extensions.cs プロジェクト: Raimusoft/FoxDb
 public static RelationFlags SetMultiplicity(this RelationFlags flags, RelationFlags multiplicity)
 {
     return((flags & ~(RelationFlags.OneToOne | RelationFlags.OneToMany | RelationFlags.ManyToMany)) | multiplicity);
 }
コード例 #27
0
ファイル: QueryTests.cs プロジェクト: Raimusoft/FoxDb
        public void ExistsNToMany(RelationFlags flags, bool invert)
        {
            var relation = this.Database.Config.Table <Test002>().Relation(item => item.Test004, Defaults.Relation.Flags | flags);
            var set      = this.Database.Set <Test002>(this.Transaction);
            var data     = new List <Test002>();

            set.Clear();
            data.AddRange(new[]
            {
                new Test002()
                {
                    Name = "1_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "1_2"
                        }, new Test004()
                        {
                            Name = "1_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "2_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "2_2"
                        }, new Test004()
                        {
                            Name = "2_3"
                        }
                    }
                },
                new Test002()
                {
                    Name = "3_1", Test004 = new List <Test004>()
                    {
                        new Test004()
                        {
                            Name = "3_2"
                        }, new Test004()
                        {
                            Name = "3_3"
                        }
                    }
                },
            });
            set.AddOrUpdate(data);
            var function = set.Fetch.Filter.CreateFunction(QueryFunction.Exists, set.Fetch.Filter.CreateSubQuery(this.Database.QueryFactory.Build().With(builder =>
            {
                var columns = relation.Expression.GetColumnMap();
                builder.Output.AddColumns(this.Database.Config.Table <Test004>().Columns);
                builder.Source.AddTable(this.Database.Config.Table <Test002>().Extern());
                builder.Source.AddTable(this.Database.Config.Table <Test004>());
                builder.RelationManager.AddRelation(relation);
                builder.Filter.AddColumn(this.Database.Config.Table <Test004>().Column("Name"));
            })));

            if (invert)
            {
                set.Fetch.Filter.Expressions.Add(set.Fetch.Filter.Fragment <IUnaryExpressionBuilder>().With(unary =>
                {
                    unary.Operator   = unary.CreateOperator(QueryOperator.Not);
                    unary.Expression = function;
                }));
            }
            else
            {
                set.Fetch.Filter.Expressions.Add(function);
            }
            set.Parameters = (parameters, phase) => parameters["Name"] = "2_2";
            if (invert)
            {
                this.AssertSequence(new[] { data[0], data[2] }, set);
            }
            else
            {
                this.AssertSequence(new[] { data[1] }, set);
            }
        }