Пример #1
0
        static void Main(string[] args)
        {
            // .ReverseMap() се ползва когато искаме от вю модел да направиме клас, който после да вкараме в базата.
            // Примерно когато потребителя е въвел нова песен от приложението, тя после за да се вкара в базата трябва да се обърне на клас, който го има в db контекста.

            //dotnet ef dbcontext scaffold "Server=.\SQLEXPRESS;Database=MusicX;Integrated Security=true" Microsoft.EntityFrameworkCore.SqlServer -o Models



            var config = new MapperConfiguration(config =>
            {
                config.CreateMap <Song, SongNameDTO>();
            });

            var mapper = config.CreateMapper();

            var db = new MusicXContext();

            Song song = db.Songs.Where(x => x.Id == 4)
                        .FirstOrDefault();

            var songDTO = mapper.Map <SongNameDTO>(song);

            Console.WriteLine(songDTO);
        }
Пример #2
0
        public static void Main(string[] args)
        {
            var db = new MusicXContext();

            // Example - Executing Native SQL Query
            var songs = db.Songs.FromSqlRaw("SELECT * FROM Songs WHERE Id < 5").ToList();

            foreach (var song in songs)
            {
                Console.WriteLine($"{song.Id} - {song.Name}");
            }

            // Example - Eager loading
            var artists = db
                          .Artists
                          .Include(a => a.SongArtists)
                          .ThenInclude(sa => sa.Song)
                          .Take(10)
                          .ToList();

            foreach (var artist in artists)
            {
                Console.WriteLine($"{artist.Name} - {artist.SongArtists.First().Song.Name}");
            }
        }
Пример #3
0
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;


            var context = new MusicXContext();

            var config = new MapperConfiguration(cfg =>
                                                 cfg.AddProfile(new SongProfile())
                                                 );

            var mapper = config.CreateMapper();

            var song = context.Songs.FirstOrDefault();

            var songDTO = mapper.Map <SongDTO>(song);


            //var songReverse = mapper.Map<SongDTO, Song>(songDTO);

            var songDTO2 = context.Songs
                           .Where(x => x.Source.Name.StartsWith("Us"))
                           .ProjectTo <SongDTO>(config).ToList();



            Console.WriteLine(JsonConvert.SerializeObject(songDTO, Formatting.Indented));
        }
Пример #4
0
        static void Main(string[] args)
        {
            // dotnet ef dbcontext scaffold "Server=.\SQLEXPRESS;Database=SoftUni;Integrated Security=true" Microsoft.EntityFrameworkCore.SqlServer -o Models - f - d

            Console.OutputEncoding = Encoding.Unicode; // конзолата да дава кирилица !!!

            var db = new MusicXContext();
            // Console.WriteLine(db.Songs.Count());

            // по дефолт се взимат само примитивните типове от данни !!!


            // WHERE
            //var songs = db.Songs.Where(x => x.Name.StartsWith("Н")).ToList();
            //Console.WriteLine(songs.Count());

            //var songs = db.Songs.Where(x => x.Source.Name == "User").ToList();
            //foreach (var song in songs)
            //{
            //    Console.WriteLine(song.Name);
            //}


            // SELECT

            var songs = db.Songs.Where(x => x.Source.Name == "User")
                        .Select(x => new
            {
                x.Name,
                Source  = x.Source.Name,
                Artists = string.Join(", ", x.SongArtists.Select(a => a.Artist.Name)),
            })
                        .ToList();

            foreach (var song in songs)
            {
                Console.WriteLine(song.Artists + " - " + song.Name);
            }

            // WITH .SELECT() => anonymous type
            // 1. (+) Navigational properties in the lambda expression
            // 2. (+) Get only the columns we need
            // 3. (-) No update/delete


            // NO .SELECT(): => original entity
            // 1. (-)No Access to navigational properties
            // 2. (-)Get All colums for entity
            // 3. (+) update/delete intity / SaveChanges()

            // anonymous type не се траква change tracker-a (savechanges!)
        }
Пример #5
0
        public static void Main(string[] args)
        {
            var db = new MusicXContext();

            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <Song, SongInfoDto>();
            });

            var mapper = config.CreateMapper();

            Song song = db.Songs.Where(x => x.Id == 10).First();

            var songDto = mapper.Map <SongInfoDto>(song);
        }
Пример #6
0
        public static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.Unicode;

            var context = new MusicXContext();

            // Example 1 - Aggregation
            var artists1 = context
                           .Artists
                           .Where(x => x.SongArtists.Count() > 50)
                           .OrderByDescending(x => x.SongArtists.Count())
                           .Select(x => new
            {
                x.Name,
                Count = x.SongArtists.Count()
            })
                           .Take(5)
                           .ToList();

            foreach (var artist in artists1)
            {
                Console.WriteLine(artist);
            }


            // Example 2 - Join
            var songs = context
                        .Songs
                        .Join(
                context.Sources,
                x => x.SourceId,
                x => x.Id,
                (song, source) => new
            {
                SongName   = song.Name,
                SourceName = source.Name
            }
                )
                        .Take(5)
                        .ToList();

            foreach (var song in songs)
            {
                Console.WriteLine(song);
            }


            // Example 3 - Group
            var groups = context
                         .Artists
                         .GroupBy(x => x.Name.Substring(0, 1))
                         .Select(x => new
            {
                FirstLetter = x.Key,
                Count       = x.Count(),
            })
                         .ToList();

            foreach (var group in groups)
            {
                Console.WriteLine(group);
            }


            // Example 4 - SelectMany
            var songs2 = context
                         .Artists
                         .SelectMany(x => x.SongArtists.Select(sa => x.Name + " - " + sa.Song.Name))
                         .Take(10)
                         .ToList();

            foreach (var song in songs2)
            {
                Console.WriteLine(song);
            }
        }