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); }
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}"); } }
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)); }
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!) }
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); }
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); } }