Возьмите, например, базу данных pubs и таблицу employee. У меня есть следующий надуманный пример, который читает группы сотрудников и просто обновляет столбец фамилии, используя Entity Framework 6.0
.
Допустим, я хочу использовать это для обновления информации о сотрудниках в базе данных Northwind. Есть ли хороший способ сделать это без создания 2-х разных программ, потому что, если для другой похожей таблицы сотрудников в другой базе данных потребуется третье консольное приложение.
Предположим, что поля в разных базах данных одинаковы, но могут иметь разные имена для полей.
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
namespace EFTransactionConsoleApplication
{
class Program
{
static void Main(string[] args)
{
using (pubsEntities dbContext = new pubsEntities())
{
using (DbContextTransaction transaction = dbContext.Database.BeginTransaction())
{
IEnumerable<employee> employees = null;
int currentPage = 1;
int totalPages = dbContext.employees.Count();
string lastEmpId = string.Empty;
try
{
do
{
employees = (from x in dbContext.employees
where string.Compare(x.emp_id, lastEmpId) > 0
orderby x.emp_id
select x).Take(5).ToList();
if (employees.Count() > 0)
{
lastEmpId = employees.Last().emp_id;
//var fifthEmp = dbContext.employees.Where(x => x.emp_id == lastEmpId).FirstOrDefault();
//fifthEmp.lname += "test";
dbContext.Database.ExecuteSqlCommand(@"
UPDATE employee SET lname = " + "'test 123'" + " WHERE emp_id = '" + lastEmpId + "'"
);
//foreach (var item in employees)
//{
// Console.WriteLine("{0}-{1}", item.emp_id, item.fname);
//}
//dbContext.SaveChanges();
}
if (currentPage == 6)
throw new Exception("Error occurred");
currentPage++;
} while (currentPage <= totalPages);
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
}
}
}
}
}