예제 #1
0
        public void Generic_AsStreaming_can_be_used_directly_on_DbSet()
        {
            using (var context = new F1Context())
            {
                var drivers = context.Drivers;

                var count = 0;
                foreach (var driver in drivers)
                {
                    Assert.NotNull(driver);
                    Assert.True(context.Database.Connection.State == ConnectionState.Closed);
                    count++;
                }
                Assert.Equal(42, count);

                count = 0;
                foreach (var driver in drivers.AsStreaming())
                {
                    Assert.NotNull(driver);
                    Assert.True(context.Database.Connection.State == ConnectionState.Open);
                    count++;
                }
                Assert.Equal(42, count);
            }
        }
예제 #2
0
        public void Non_generic_ObjectSet_AsStreaming_can_be_used_directly_on_generic_ObjectSet()
        {
            using (var context = new F1Context())
            {
                var drivers = (IQueryable)CreateObjectSet <Driver>(context);

                var count = 0;
                foreach (var driver in drivers)
                {
                    Assert.NotNull(driver);
                    Assert.True(context.Database.Connection.State == ConnectionState.Closed);
                    count++;
                }
                Assert.Equal(42, count);

                count = 0;
                foreach (var driver in drivers.AsStreaming())
                {
                    Assert.NotNull(driver);
                    Assert.True(context.Database.Connection.State == ConnectionState.Open);
                    count++;
                }
                Assert.Equal(42, count);
            }
        }
예제 #3
0
        public void ObjectSet_AsStreaming_can_be_used_before_the_rest_of_the_query()
        {
            using (var context = new F1Context())
            {
                var drivers = CreateObjectSet <Driver>(context);

                var count = 0;
                foreach (var winner in drivers.Where(d => d.Wins > 20))
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Closed);
                    count++;
                }
                Assert.Equal(2, count);

                count = 0;
                foreach (var winner in drivers.Where(d => d.Wins > 20).AsStreaming())
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Open);
                    count++;
                }
                Assert.Equal(2, count);
            }
        }
예제 #4
0
        public void Non_generic_AsStreaming_can_be_used_directly_on_DbQuery()
        {
            using (var context = new F1Context())
            {
                var expression = context.Drivers.Where(d => d.Wins > 20).Expression;
                var query      = (DbQuery)((IQueryable)context.Set(typeof(Driver))).Provider.CreateQuery(expression);

                var count = 0;
                foreach (var winner in query)
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Closed);
                    count++;
                }
                Assert.Equal(2, count);

                count = 0;
                foreach (var winner in query.AsStreaming())
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Open);
                    count++;
                }
                Assert.Equal(2, count);
            }
        }
예제 #5
0
        public void Generic_ObjectSet_AsStreaming_can_be_used_on_IQueryable()
        {
            using (var context = new F1Context())
            {
                var winners = CreateObjectSet <Driver>(context).Where(d => d.Wins > 20);

                var count = 0;
                foreach (var winner in winners)
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Closed);
                    count++;
                }
                Assert.Equal(2, count);

                count = 0;
                foreach (var winner in winners.AsStreaming())
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Open);
                    count++;
                }
                Assert.Equal(2, count);
            }
        }
예제 #6
0
    private static void VerifyTeam(F1Context context, Team team, IDictionary <int, Team> teamsMap)
    {
        var trackedTeam = context.Teams.Find(team.Id);

        Assert.Equal(trackedTeam.Constructor, team.Constructor);
        Assert.Equal(trackedTeam.Name, team.Name);
        Assert.Equal(trackedTeam.Poles, team.Poles);
        Assert.Equal(trackedTeam.Principal, team.Principal);
        Assert.Equal(trackedTeam.Races, team.Races);
        Assert.Equal(trackedTeam.Tire, team.Tire);
        Assert.Equal(trackedTeam.Victories, team.Victories);
        Assert.Equal(trackedTeam.ConstructorsChampionships, team.ConstructorsChampionships);
        Assert.Equal(trackedTeam.DriversChampionships, team.DriversChampionships);
        Assert.Equal(trackedTeam.FastestLaps, team.FastestLaps);

        if (teamsMap != null)
        {
            if (teamsMap.TryGetValue(team.Id, out var mappedTeam))
            {
                Assert.Same(team, mappedTeam);
            }

            teamsMap[team.Id] = team;
        }
    }
예제 #7
0
 public static bool SupplierExist(string SupplierName)
 {
     using (F1Context context = new F1Context())
     {
         return context.Suppliers.ToList().Exists(i => i.Name == SupplierName);
     }
 }
예제 #8
0
 public static bool ResultHasRace(string RaceName)
 {
     using (F1Context context = new F1Context())
     {
         return context.RaceResults.ToList().Exists(i => i.Race.RaceName == RaceName);
     }
 }
예제 #9
0
 public void DbSet_Local_from_generic_set_is_same_as_from_non_generic_set()
 {
     using (var context = new F1Context())
     {
         Assert.Same(context.Drivers.Local, context.Set(typeof(Driver)).Local);
     }
 }
예제 #10
0
 /// <summary>
 /// Returns true if any driver have a relation to the team specified.
 /// </summary>
 /// <param name="teamName"></param>
 /// <returns></returns>
 public static bool DriverHasTeam(string teamName)
 {
     using (F1Context context = new F1Context())
     {
         return context.Drivers.ToList().Exists(i => i.Team.Name == teamName);
     }
 }
예제 #11
0
 public static bool ResultHasDriver(string FirstName, string LastName)
 {
     using (F1Context context = new F1Context())
     {
         return context.RaceResults.ToList().Exists(i => i.Driver.FirstName == FirstName && i.Driver.LastName == LastName);
     }
 }
예제 #12
0
        public void Entity_added_to_navigation_property_binding_list_is_added_to_context_after_DetectChanges()
        {
            using (var context = new F1Context())
            {
                var ferrari        = context.Teams.Include(t => t.Drivers).Single(t => t.Id == Team.Ferrari);
                var navBindingList = ((IListSource)ferrari.Drivers).GetList();
                var localDrivers   = context.Drivers.Local;

                var larry = new Driver
                {
                    Id        = -1,
                    Name      = "Larry David",
                    TeamId    = Team.Ferrari,
                    CarNumber = 13
                };
                navBindingList.Add(larry);

                Assert.False(localDrivers.Contains(larry));

                GetObjectContext(context).DetectChanges();

                Assert.True(localDrivers.Contains(larry));
                Assert.Same(larry, context.Drivers.Find(-1));
            }
        }
예제 #13
0
        protected void SetupContext(F1Context context)
        {
            var drivers = context.Drivers;

            drivers.Load();

            foreach (var driver in drivers.Local.Where(d => d.TeamId == DeletedTeam).ToList())
            {
                drivers.Remove(driver);
            }

            foreach (var driver in drivers.Local.Where(d => d.TeamId == ModifedTeam).ToList())
            {
                driver.Races = 5;
            }

            drivers.Add(
                new Driver
            {
                Name      = "Pedro de la Rosa",
                TeamId    = AddedTeam,
                CarNumber = 13
            });
            drivers.Add(
                new Driver
            {
                Name      = "Kamui Kobayashi",
                TeamId    = AddedTeam,
                CarNumber = null
            });
        }
예제 #14
0
 public static bool TeamExist(string TeamName)
 {
     using (F1Context context = new F1Context())
     {
         return context.Teams.ToList().Exists(i => i.Name == TeamName);
     }
 }
예제 #15
0
        public void Generic_AsStreaming_can_be_used_directly_on_DbQuery()
        {
            using (var context = new F1Context())
            {
                var winners = (DbQuery <Driver>)context.Drivers.Where(d => d.Wins > 20);

                var count = 0;
                foreach (var winner in winners)
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Closed);
                    count++;
                }
                Assert.Equal(2, count);

                count = 0;
                foreach (var winner in winners.AsStreaming())
                {
                    Assert.NotNull(winner);
                    Assert.True(context.Database.Connection.State == ConnectionState.Open);
                    count++;
                }
                Assert.Equal(2, count);
            }
        }
예제 #16
0
 public static bool DriverExist(string FirstName, string LastName)
 {
     using (F1Context context = new F1Context())
     {
         return context.Drivers.ToList().Exists(i => i.FirstName == FirstName && i.LastName == LastName);
     }
 }
예제 #17
0
 public void Creating_DbEntityEntry_for_entity_type_that_is_not_in_the_model_throws()
 {
     using (var context = new F1Context())
     {
         Assert.Throws <InvalidOperationException>(() => context.Entry(new Category())).ValidateMessage(
             "DbSet_EntityTypeNotInModel", typeof(Category).Name);
     }
 }
예제 #18
0
        public void DbSet_Local_ToBindingList_is_cached_on_the_set()
        {
            using (var context = new F1Context())
            {
                var bindingList = context.Drivers.Local.ToBindingList();

                Assert.Same(bindingList, context.Drivers.Local.ToBindingList());
            }
        }
예제 #19
0
        private void DbSet_Local_is_cached_on_the_set_implementation(Func <F1Context, IList> getLocal)
        {
            using (var context = new F1Context())
            {
                var local = getLocal(context);

                Assert.Same(local, getLocal(context));
            }
        }
예제 #20
0
        public F1Context CreateF1Context(string connectionString)
        {
            var options
                = new DbContextOptions()
                  .UseModel(AddStoreMetadata(F1Context.CreateModel()))
                  .UseSqlServer(connectionString);

            return(new F1Context(_serviceProvider, options));
        }
예제 #21
0
 private static void AddEntities(F1Context context)
 {
     foreach (var engineSupplier in new List <EngineSupplier>
     {
         new() { Name = "Mercedes" },
         new() { Name = "Renault" },
         new() { Name = "Ferrari" },
         new() { Name = "Cosworth" }
     })
예제 #22
0
        public void Non_generic_ObjectSet_AsNoTracking_can_be_used_directly_on_generic_ObjectSet()
        {
            using (var context = new F1Context())
            {
                var drivers = ((IQueryable)CreateObjectSet <Driver>(context)).AsNoTracking().ToList <Driver>();

                Assert.True(drivers.Count > 0);
                Assert.Equal(0, context.ChangeTracker.Entries().Count());
            }
        }
예제 #23
0
        public void ObjectSet_AsNoTracking_can_be_used_after_the_rest_of_the_query()
        {
            using (var context = new F1Context())
            {
                var drivers = CreateObjectSet <Driver>(context).Where(d => d.Wins > 0).AsNoTracking().ToList();

                Assert.Equal(13, drivers.Count);
                Assert.Equal(0, context.ChangeTracker.Entries().Count());
            }
        }
예제 #24
0
        public void Generic_AsNoTracking_can_be_used_on_IQueryable()
        {
            using (var context = new F1Context())
            {
                var webber = context.Drivers.Where(d => d.Name == "Mark Webber").AsNoTracking().Single();

                Assert.Equal("Mark Webber", webber.Name);
                Assert.Equal(0, context.ChangeTracker.Entries().Count());
            }
        }
예제 #25
0
        public void AsNoTracking_can_be_used_before_the_rest_of_the_query()
        {
            using (var context = new F1Context())
            {
                var drivers = context.Drivers.AsNoTracking().Where(d => d.Wins > 0).ToList();

                Assert.Equal(13, drivers.Count);
                Assert.Equal(0, context.ChangeTracker.Entries().Count());
            }
        }
예제 #26
0
        public void Lazy_loading_entity_collection_works_on_modified_entity()
        {
            using (var context = new F1Context())
            {
                var team = context.Teams.FirstOrDefault();
                team.Constructor = "Fooblearius Fooblebar";

                Assert.True(team.Drivers.Count > 0);
            }
        }
예제 #27
0
        public void Non_generic_AsNoTracking_can_be_used_directly_on_DbSet()
        {
            using (var context = new F1Context())
            {
                var drivers = context.Set(typeof(Driver)).AsNoTracking().ToList <Driver>();

                Assert.True(drivers.Count > 0);
                Assert.Equal(0, context.ChangeTracker.Entries().Count());
            }
        }
예제 #28
0
        public void Entities_materialized_into_context_are_reflected_in_local_binding_list()
        {
            using (var context = new F1Context())
            {
                var bindingList = context.Drivers.Local.ToBindingList();

                context.Drivers.Where(d => d.TeamId == UnchangedTeam).Load();

                Assert.Equal(UnchangedCount, bindingList.Count);
            }
        }
        public override F1Context CreateContext(SqliteTestStore testStore)
        {
            var optionsBuilder = new EntityOptionsBuilder();

            optionsBuilder.UseSqlite(testStore.Connection);

            var context = new F1Context(_serviceProvider, optionsBuilder.Options);

            context.Database.AsRelational().Connection.UseTransaction(testStore.Transaction);
            return(context);
        }
        public override F1Context CreateContext(SqlServerTestStore testStore)
        {
            var options
                = new DbContextOptions()
                  .UseSqlServer(testStore.Connection);

            var context = new F1Context(_serviceProvider, options);

            context.Database.AsRelational().Connection.UseTransaction(testStore.Transaction);
            return(context);
        }
예제 #31
0
        public void Lazy_loading_of_entity_reference_does_not_work_on_detached_entity()
        {
            using (var context = new F1Context())
            {
                var team          = context.Teams.FirstOrDefault();
                var objectContext = ((IObjectContextAdapter)context).ObjectContext;
                objectContext.Detach(team);

                Assert.Null(team.Engine);
            }
        }
예제 #32
0
        public override F1Context CreateContext(NpgsqlTestStore testStore)
        {
            var optionsBuilder = new DbContextOptionsBuilder()
                                 .UseNpgsql(testStore.Connection, b => b.ApplyConfiguration())
                                 .UseInternalServiceProvider(_serviceProvider);

            var context = new F1Context(optionsBuilder.Options);

            context.Database.UseTransaction(testStore.Transaction);
            return(context);
        }
예제 #33
0
        public void Lazy_loading_entity_collection_does_not_work_on_deleted_entity()
        {
            using (var context = new F1Context())
            {
                var team          = context.Teams.FirstOrDefault();
                var objectContext = ((IObjectContextAdapter)context).ObjectContext;
                objectContext.DeleteObject(team);

                Assert.Equal(0, team.Drivers.Count);
            }
        }
예제 #34
0
        public ActionResult AddToDetail(int?ID = 1)
        {
            F1Context  db     = new F1Context();
            Team       t      = db.Teams.Find(ID);
            DetailTeam myTeam = DetailTeam.GetCart(Session["MyTeam"]);

            myTeam.AddItem(t.ID, t);
            Session["MyTeam"] = myTeam;
            //return Redirect("/Home/Catalog/?restoreFilter=true");
            return(Redirect("/Home/Detail"));
        }
예제 #35
0
        public override F1Context CreateContext(SqlServerTestStore testStore)
        {
            var optionsBuilder = new DbContextOptionsBuilder()
                                 .UseSqlServer(testStore.Connection)
                                 .UseInternalServiceProvider(_serviceProvider);

            var context = new F1Context(optionsBuilder.Options);

            context.Database.UseTransaction(testStore.Transaction);
            return(context);
        }
예제 #36
0
        public void Load_executes_query_on_DbQuery()
        {
            using (var context = new F1Context())
            {
                context.Drivers.Where(d => d.TeamId == UnchangedTeam).Load();

                Assert.Equal(
                    UnchangedCount,
                    GetObjectContext(context).ObjectStateManager.GetObjectStateEntries(~EntityState.Detached).
                    Count());
            }
        }
 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
     using (F1Context context = new F1Context())
     {
         if (context.Tracks.ToList().Exists(i => i.TrackName == (string)value))
         {
             return context.Tracks.ToList().Find(i => i.TrackName == (string)value);
         }
         else
         {
             return new Track() { TrackName = (string)value };
         }
     }
 }
 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
     var str = (string)value;
     if (str.Contains(' '))
     {
         var strsplit = str.Split(' ');
         using (F1Context context = new F1Context())
         {
             if (ValidateHelper.DriverExist(strsplit[0], strsplit[1]))
             {
                 return context.Drivers.ToList().Find(i => i.FirstName == strsplit[0] && i.LastName == strsplit[1]);
             }
             else
             {
                 return new Driver() { FirstName = strsplit[0], LastName = strsplit[1] };
             }
         }
     }
     else
     {
         return new Driver() { FirstName = str };
     }
 }
예제 #39
0
 public static bool TrackExist(string TrackName)
 {
     using (F1Context context = new F1Context())
     {
         return context.Tracks.ToList().Exists(i => i.TrackName == TrackName);
     }
 }