public EventWithMarketEntity GetEvent(int eventId, int marketCount)
        {
            var ev = _context.Set<EventWithMarketEntity>()
                        .Where(e => e.Id == eventId)
                        .Select(e =>
                            new
                            {
                                Event = e,
                                Markets = e.Markets.OrderBy(m => m.Id).Take(marketCount),
                                Types = e.Markets.Select(m => m.Type) // Load the market types, alternative for Include 
                            }) 
                        .FirstOrDefault();

            if (ev == null) return null;

            var eventWithMarket = new EventWithMarketEntity
            {
                Id = ev.Event.Id,
                Name = ev.Event.Name,
                Timestamp = ev.Event.Timestamp,
                Markets = ev.Markets.ToList()
            };

            return eventWithMarket;
        }
        public void Setup()
        {
            EntityFrameworkProfiler.Initialize();

            var context = new SportsbookContext();//_connectionString);

            var matchWinner = new MarketTypeEntity
            {
                Name = "Match Winner"
            };

            var newEvent = new EventWithMarketEntity
            {
                Name = "Manchester United - Real Madrid",
            };

            var newMaket = new MarketEntity
            {
                Type = matchWinner,
                Event = newEvent
            };

            context.Entry(newMaket).State = EntityState.Added;
            var result = context.SaveChanges();
            Assert.IsTrue(result > 0);
        }
        public void SavingWithNavigationalProperty()
        {
            var context = new SportsbookContext();//_connectionString);

            var matchWinner = new MarketTypeEntity
            {
                Name = "Match Winner"
            };

            var ev = new EventWithMarketEntity
            {
                Name = "AC Milan - New Castle"
            };

            var market = new MarketEntity
            {
                Type = matchWinner,
                Event = ev
            };

            context.Entry(market).State = EntityState.Added;
            var result = context.SaveChanges();
            Assert.IsTrue(result > 0);
        }
        public void AddMarketToEventWithMarket()
        {
            var context = new SportsbookContext();//_connectionString);

            var matchWinner = new MarketTypeEntity
            {
                Name = "Match Winner"
            };

            var eventId = context.Set<MarketEntity>()
                .Select(m => m.Event.Id)
                .FirstOrDefault();

            var existingEvent = new EventWithMarketEntity
            {
                Id = eventId,
            };

            var newMarket = new MarketEntity
            {
                Event = existingEvent,
                Type = matchWinner,
            };

            context.Entry(existingEvent).State = EntityState.Unchanged;
            context.Entry(newMarket).State = EntityState.Added;
            context.SaveChanges();
        }
        public void OneEventToManyMarketsRelationship()
        {
            var context = new SportsbookContext();//_connectionString);

            var matchWinner = new MarketTypeEntity
            {
                Name = "Match Winner"
            };

            var overUnder = new MarketTypeEntity
            {
                Name = "Match Winner"
            };

            var ev = new EventWithMarketEntity
            {
                Name = "Manchester City - Barcelona FC"
            };

            var market1 = new MarketEntity
            {
                Type = matchWinner,
                Event = ev
            };

            var market2 = new MarketEntity
            {
                Type = overUnder,
                Event = ev
            };

            context.Entry(market1).State = EntityState.Added;
            context.Entry(market2).State = EntityState.Added;
            context.SaveChanges();
        }