private TimeSpan ImportMembersSQL(IList members) { using (var db = new DocEntities()) { db.Database.CreateIfNotExists(); } using (var connection = Database.DefaultConnectionFactory.CreateConnection("DocEntities")) { connection.Open(); using (var transaction = connection.BeginTransaction()) using (var insertMemberCommand = connection.CreateCommand()) using (var insertItemCommand = connection.CreateCommand()) using (var getIdentityCommand = connection.CreateCommand()) { insertMemberCommand.CommandText = "INSERT INTO DocMembers(Name, MemberType, AssemblyName) VALUES(@name, @memberType, @assemblyName)"; insertMemberCommand.AddParameter("@name", DbType.String); insertMemberCommand.AddParameter("@memberType", DbType.String); insertMemberCommand.AddParameter("@assemblyName", DbType.String); insertMemberCommand.Transaction = transaction; insertMemberCommand.Prepare(); insertItemCommand.CommandText = "INSERT INTO DocItems(PartType, PartName, Text, Member_Id) VALUES (@partType, @partName, @text, @memberId)"; insertItemCommand.AddParameter("@partType", DbType.String); insertItemCommand.AddParameter("@partName", DbType.String); insertItemCommand.AddParameter("@text", DbType.String); insertItemCommand.AddParameter("@memberId", DbType.Int32); insertItemCommand.Transaction = transaction; insertItemCommand.Prepare(); getIdentityCommand.CommandText = "SELECT @@IDENTITY AS Id"; getIdentityCommand.Transaction = transaction; getIdentityCommand.Prepare(); var sw = Stopwatch.StartNew(); foreach (var m in members) { insertMemberCommand.Parameters["@name"].Value = m.Name; insertMemberCommand.Parameters["@memberType"].Value = m.MemberType; insertMemberCommand.Parameters["@assemblyName"].Value = m.AssemblyName; insertMemberCommand.ExecuteNonQuery(); m.Id = Convert.ToInt32(getIdentityCommand.ExecuteScalar()); foreach (var item in m.Items) { insertItemCommand.Parameters["@partType"].Value = item.PartType; insertItemCommand.Parameters["@partName"].Value = item.PartName; insertItemCommand.Parameters["@text"].Value = item.Text; insertItemCommand.Parameters["@memberId"].Value = m.Id; insertItemCommand.ExecuteNonQuery(); item.Id = Convert.ToInt32(getIdentityCommand.ExecuteScalar()); } Progress++; } transaction.Commit(); sw.Stop(); return sw.Elapsed; } } }