2017-05-18 1 views
0

J'ai décidé de convertir mon ADO.Net avec le code de paramètre de valeur de table pour mettre à jour plusieurs lignes de 10 000 lignes vers Entity Framework comme dans le code ci-dessous. Les résultats ci-dessous montrent qu'il a fallu moins d'une seconde à ADO.Net TVP alors que Entity Framework a pris 2 minutes: 34 secondes. Ma question est maintenant comment puis-je accélérer mon code Entity Framework pour courir aussi vite que mon ADO.Net avec le code TVP?Entity Framework vs ADO.Net avec TVP mise à jour de plusieurs lignes

enter image description here

[Table("Employee")] 
public class Employee 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int EmployeeId { get; set; } 
    public string FirstName { get; set; } 
    public string Lastname { get; set; } 
    public string Town { get; set; } 
    public string PostCode { get; set; } 
} 

public class EmployeeContext : DbContext 
{ 
    public DbSet<Employee> Employees { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Employee> employees = new List<Employee>(); 


     Stopwatch stopwatch = Stopwatch.StartNew(); 

     for (int i = 1; i <= 10000; i++) 
     { 

      Employee emp = new Employee(); 

      emp.EmployeeId = i; 
      emp.FirstName = "FirstName" + i; 
      emp.Lastname = "Lastname" + i; 
      emp.Town = "Town" + i; 
      emp.PostCode = "PostCode" + i; 

      employees.Add(emp); 

     } 

     var e = employees.OrderBy(o => Convert.ToInt32(o.EmployeeId)).ToList(); 
     SaveEmployeeToDatabase(e, "EmployeeDB"); 
     stopwatch.Stop(); 
     string t = stopwatch.Elapsed.ToString(); 
     Console.WriteLine("Time Elapse: " + t + ": " + "ADO.Net Update Multiple Rows with TVP"); 


     /*Entity Entity Framework Update Multiple Rows*/ 

     EmployeeContext db = new EmployeeContext(); 

     Stopwatch stopwatch1 = Stopwatch.StartNew(); 

     for (int i = 1; i <= 10000; i++) 
     { 

      Employee emp1 = new Employee(); 

      emp1.EmployeeId = i; 
      emp1.FirstName = "NewFirstName" + i; 
      emp1.Lastname = "NewLastname" + i; 
      emp1.Town = "NewTown" + i; 
      emp1.PostCode = "NewPostCode" + i; 

      db.Employees.Add(emp1); 
      db.Entry(emp1).State = EntityState.Modified; 

     } 

     db.SaveChanges(); 
     stopwatch1.Stop(); 
     string t1 = stopwatch1.Elapsed.ToString(); 
     Console.WriteLine("Time Elapse: " + t1 + ": " + "Entity Framework Update Multiple Rows"); 
     Console.Read(); 
    } 

Répondre

1

Ma question est maintenant comment puis-je SpeedUp mon code Entity Framework pour courir aussi vite que mon ADO.Net avec le code PVT?

Vous n'en avez pas. Vous "descendez" vers ADO.NET ou TSQL pour les opérations en bloc et les requêtes compliquées. Mais vous économisez encore beaucoup de temps et d'efforts en utilisant EF pour la plupart de vos requêtes et transactions.

+0

Merci David pour votre réponse. – CodingSoft