示例#1
0
        public void SaveMList()
        {
            using (var tr = new Transaction())
                using (OperationLogic.AllowSave <LabelEntity>())
                    using (OperationLogic.AllowSave <CountryEntity>())
                        using (OperationLogic.AllowSave <AlbumEntity>())
                            using (OperationLogic.AllowSave <ArtistEntity>())
                            {
                                var prev = Database.MListQuery((AlbumEntity a) => a.Songs).Count();

                                Type[] types = typeof(int).Assembly.GetTypes().Where(a => a.Name.Length > 3 && a.Name.StartsWith("A")).ToArray();

                                AlbumEntity album = new AlbumEntity()
                                {
                                    Name   = "System Greatest hits",
                                    Author = new ArtistEntity {
                                        Name = ".Net Framework"
                                    },
                                    Year  = 2001,
                                    Songs = types.Select(t => new SongEmbedded()
                                    {
                                        Name = t.Name
                                    }).ToMList(),
                                    State = AlbumState.Saved,
                                    Label = new LabelEntity {
                                        Name = "Four Music", Country = new CountryEntity {
                                            Name = "Germany"
                                        }, Node = MusicLoader.NextLabelNode()
                                    },
                                }.Save();

                                Assert.All(GraphExplorer.FromRoot(album), a => Assert.False(a.IsGraphModified));

                                Assert.Equal(prev + types.Length, Database.MListQuery((AlbumEntity a) => a.Songs).Count());

                                album.Name += "Updated";

                                album.Save();

                                album.Songs.ForEach(a => a.Name = "Updated");

                                album.Save();

                                //tr.Commit();
                            }
        }
示例#2
0
        public void SaveMList()
        {
            using (Transaction tr = new Transaction())
                using (OperationLogic.AllowSave <AlbumEntity>())
                    using (OperationLogic.AllowSave <ArtistEntity>())
                    {
                        var prev = Database.MListQuery((AlbumEntity a) => a.Songs).Count();

                        Type[] types = typeof(int).Assembly.GetTypes().Where(a => a.Name.Length > 3 && a.Name.StartsWith("A")).ToArray();

                        AlbumEntity album = new AlbumEntity()
                        {
                            Name   = "System Greatest hits",
                            Author = new ArtistEntity {
                                Name = ".Net Framework"
                            },
                            Year  = 2001,
                            Songs = types.Select(t => new SongEntity()
                            {
                                Name = t.Name
                            }).ToMList(),
                            State = AlbumState.Saved
                        }.Save();

                        Assert2.AssertAll(GraphExplorer.FromRoot(album), a => !a.IsGraphModified);

                        Assert.AreEqual(prev + types.Length, Database.MListQuery((AlbumEntity a) => a.Songs).Count());

                        album.Name += "Updated";

                        album.Save();

                        album.Songs.ForEach(a => a.Name = "Updated");

                        album.Save();

                        //tr.Commit();
                    }
        }
示例#3
0
        public void SmartSaveMListOrder()
        {
            using (Transaction tr = new Transaction())
                using (OperationLogic.AllowSave <AlbumEntity>())
                    using (OperationLogic.AllowSave <ArtistEntity>())
                    {
                        var artist = Database.Query <ArtistEntity>().First();

                        var album = new AlbumEntity
                        {
                            Name   = "Test album",
                            Author = artist,
                            Year   = 2000,
                            Songs  = { new SongEntity {
                                           Name = "Song 0"
                                       }, new SongEntity {
                                           Name = "Song 1"
                                       }, new SongEntity {
                                           Name = "Song 2"
                                       }, },
                            State = AlbumState.Saved,
                        };

                        album.Save();

                        AssertSequenceEquals(album.MListElements(a => a.Songs).OrderBy(a => a.Order).Select(mle => KVP.Create(mle.Order, mle.Element.Name)),
                                             new Dictionary <int, string> {
                            { 0, "Song 0" }, { 1, "Song 1" }, { 2, "Song 2" }
                        });

                        var ids = album.MListElements(a => a.Songs).Select(a => a.RowId).ToHashSet();

                        album.Songs.SortDescending(a => a.Name);

                        album.Save();

                        var ids2 = album.MListElements(a => a.Songs).Select(a => a.RowId).ToHashSet();

                        AssertSequenceEquals(ids.OrderBy(), ids2.OrderBy());


                        AssertSequenceEquals(album.MListElements(a => a.Songs).OrderBy(a => a.Order).Select(mle => KVP.Create(mle.Order, mle.Element.Name)),
                                             new Dictionary <int, string> {
                            { 0, "Song 2" }, { 1, "Song 1" }, { 2, "Song 0" }
                        });


                        var s3 = album.Songs[0];

                        album.Songs.RemoveAt(0);

                        album.Songs.Insert(1, s3);

                        album.Save();

                        AssertSequenceEquals(album.MListElements(a => a.Songs).OrderBy(a => a.Order).Select(mle => KVP.Create(mle.Order, mle.Element.Name)),
                                             new Dictionary <int, string> {
                            { 0, "Song 1" }, { 1, "Song 2" }, { 2, "Song 0" }
                        });

                        AssertSequenceEquals(album.ToLite().Retrieve().Songs.Select(a => a.Name), new[] { "Song 1", "Song 2", "Song 0" });

                        //tr.Commit();
                    }
        }
示例#4
0
        public void SmartSaveMList()
        {
            using (Transaction tr = new Transaction())
                using (OperationLogic.AllowSave <AlbumEntity>())
                    using (OperationLogic.AllowSave <ArtistEntity>())
                    {
                        var maxRowId = Database.MListQuery((AlbumEntity a) => a.Songs).Max(a => a.RowId);

                        var artist = Database.Query <ArtistEntity>().First();

                        var album = new AlbumEntity
                        {
                            Name   = "Test album",
                            Author = artist,
                            Year   = 2000,
                            Songs  = { new SongEntity {
                                           Name = "Song 1"
                                       } },
                            State = AlbumState.Saved,
                        };

                        var innerList = ((IMListPrivate <SongEntity>)album.Songs).InnerList;

                        Assert.IsNull(innerList[0].RowId);
                        //Insert and row-id is set
                        album.Save();
                        Assert.IsNotNull(innerList[0].RowId);
                        Assert.IsTrue(innerList[0].RowId > maxRowId);


                        album.Songs.Add(new SongEntity {
                            Name = "Song 2"
                        });

                        Assert.IsNull(innerList[1].RowId);

                        album.Save();
                        //Insert and row-id is set
                        Assert.IsNotNull(innerList[1].RowId);

                        var song = innerList[0];

                        album.Songs.Remove(song.Element);
                        //Delete
                        album.Save();

                        {
                            var album2 = album.ToLite().Retrieve();

                            Assert.IsTrue(album.Songs.Count == album2.Songs.Count);
                            Assert.IsTrue(innerList[0].RowId == ((IMListPrivate <SongEntity>)album2.Songs).InnerList[0].RowId);
                            Assert.IsTrue(!album.MListElements(a => a.Songs).Any(mle => mle.RowId == song.RowId));
                        }

                        album.Songs[0].Name += "*";
                        //Update
                        album.Save();

                        {
                            var album2 = album.ToLite().Retrieve();

                            Assert.IsTrue(album.Songs.Count == album2.Songs.Count);
                            Assert.IsTrue(innerList[0].RowId == ((IMListPrivate <SongEntity>)album2.Songs).InnerList[0].RowId);
                            Assert.IsTrue(album.Songs[0].Name == album2.Songs[0].Name);
                            Assert.IsTrue(!album.MListElements(a => a.Songs).Any(mle => mle.RowId == song.RowId));
                        }

                        //tr.Commit();
                    }
        }