Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提高datacontext save entityframework的性能_C#_Asp.net Mvc_Entity Framework_Repository Pattern_Unit Of Work - Fatal编程技术网

C# 提高datacontext save entityframework的性能

C# 提高datacontext save entityframework的性能,c#,asp.net-mvc,entity-framework,repository-pattern,unit-of-work,C#,Asp.net Mvc,Entity Framework,Repository Pattern,Unit Of Work,我在实体框架中使用带有工作单元的存储库模式,在尝试插入数据列表时面临性能问题 这是我的密码 var CurrentVersion = GlobalMethods.GetVersion(dFactory); var importedData = await GetImportData(); _uow.BeginTransaction(); try { foreach (v

我在实体框架中使用带有工作单元的存储库模式,在尝试插入数据列表时面临性能问题

这是我的密码

var CurrentVersion = GlobalMethods.GetVersion(dFactory);
            var importedData = await GetImportData();
            _uow.BeginTransaction();
            try
            {
                foreach (var item in importedData)
                {

                        Account accountData = new Account()
                        {
                            AccountSiebelCode = item.account_code,
                            AccountName = item.account_name,
                            AccountZip = "",
                            CountryID = 1,
                            AccountRegistration = "",//null allowed
                            AccountDisabled = item.account_status != "active" ? true : false,
                            TMID = 0, //Trademark Id
                            AccountAreaNr = "",
                            Audit_User = User.Identity.Name,
                            VersionDataID = CurrentVersion.Item2,
                            VersionAction = "",//Set at Business
                            TokenKey = GlobalMethods.GetTokenAsync().Result
                        };
                        //string contactUserName = "";

                        string contactUserName = item.last_name.Replace(" ", "").Count() > 4 ? item.last_name.Replace(" ", "").Substring(0, 4) : item.last_name.Replace(" ", "");
                        contactUserName += item.first_name.Substring(0, 1).ToString();
                        Microsoft.AspNet.Identity.PasswordHasher haspwd= new Microsoft.AspNet.Identity.PasswordHasher();

                        Contact contactData = new Contact()
                        {
                            ContactSiebelCode = item.account_code,
                            AccountID = 0, //Account Id
                            ContactFirstName = item.first_name,
                            ContactLastName = item.last_name,
                            ContactTitle = "",
                            ContactType = "",
                            ContactDOB = DateTime.Now, // Dob
                            ContactEmail = item.email,
                            ContactMobile = "",
                            ContactPhone = item.phonenumber,
                            ContactDisabled = false, //contact disabled
                            ContactAppEnabled = true, //contact app enabled
                            UserName = contactUserName, //username
                            //PasswordHash = BCryptEncryption.Encrypt("Gr@fi0ffshore"), //password
                            //PasswordHash = haspwd.HashPassword("Gr@fi0ffshore"), //password
                            PasswordHash ="R1-"+ System.Web.Security.Membership.GeneratePassword(6,1), //password
                            PinCode = "1234", //picode
                            LockOutEnabled = false, //lockout
                            AccessFailedCount = 0, //accessfailedcount
                            Audit_User = User.Identity.Name,
                            VersionDataID = CurrentVersion.Item2,
                            VersionAction = "",//Set at Business
                            TokenKey = GlobalMethods.GetTokenAsync().Result

                        };
                        TradeMarketer tradeMarketerData = new TradeMarketer()
                        {
                            TMSiebelCode = item.account_code,
                            TMFirstName = item.trade_marketeer_firstname,
                            TMLastName = item.trade_marketeer_lastname,
                            TMEmail = "",
                            TMAreaNr = item.region,
                            CountryID = 1, //country id
                            Audit_User = User.Identity.Name,
                            VersionDataId = CurrentVersion.Item2,
                            VersionAction = "",//Set at Business
                            TokeyKey = GlobalMethods.GetTokenAsync().Result
                        };
                        _biznessTradeMarketer.Save(tradeMarketerData);
                        _uow.SaveChanges();

                        accountData.TMID = tradeMarketerData.TMID;
                        _biznessAccount.Save(accountData);
                        _uow.SaveChanges();

                        contactData.AccountID = accountData.AccountID;
                        _biznessContact.Save(contactData);
                        _uow.SaveChanges();
                }

                _uow.Commit();
            }
            catch (Exception ex)
            {
                _uow.Rollback();
                ModelState.AddModelError("", ex.InnerException);
            }

在上述情况下,似乎需要40到50秒才能在importedData对象中插入或更新450行。如果不执行savechanges()之类的数据库操作,该操作将在几秒钟内完成。如何在这种情况下提高绩效。谢谢

尝试调用
\u uow.SaveChanges()不在
foreach
循环内。在
\u uow.Commit()之前执行此操作


尝试调用
\u uow.SaveChanges()不在
foreach
循环内。在
\u uow.Commit()之前执行此操作


尝试调用
\u uow.SaveChanges()不在
foreach
循环内。在
\u uow.Commit()之前执行此操作


尝试调用
\u uow.SaveChanges()不在
foreach
循环内。在
\u uow.Commit()之前执行此操作


我需要从帐户中的商标和联系人中的帐户Id插入商标Id,因为它们是外键,accountData.TMID=trademarketdata.TMID;contactData.AccountID=accountData.AccountID;在循环外调用save changes不会获取我看到的那些外键。。嗯,您可以尝试为每个导入的项目创建一个DbContext。因为DbContext引用每个实体,这将减慢每次保存的速度。我需要从帐户中的商标和联系人中的帐户Id插入商标Id,因为它们是外键,accountData.TMID=trademarketdata.TMID;contactData.AccountID=accountData.AccountID;在循环外调用save changes不会获取我看到的那些外键。。嗯,您可以尝试为每个导入的项目创建一个DbContext。因为DbContext引用每个实体,这将减慢每次保存的速度。我需要从帐户中的商标和联系人中的帐户Id插入商标Id,因为它们是外键,accountData.TMID=trademarketdata.TMID;contactData.AccountID=accountData.AccountID;在循环外调用save changes不会获取我看到的那些外键。。嗯,您可以尝试为每个导入的项目创建一个DbContext。因为DbContext引用每个实体,这将减慢每次保存的速度。我需要从帐户中的商标和联系人中的帐户Id插入商标Id,因为它们是外键,accountData.TMID=trademarketdata.TMID;contactData.AccountID=accountData.AccountID;在循环外调用save changes不会获取我看到的那些外键。。嗯,您可以尝试为每个导入的项目创建一个DbContext。因为DbContext引用每个实体,这会降低每次保存的速度。
var CurrentVersion = GlobalMethods.GetVersion(dFactory);
            var importedData = await GetImportData();
            _uow.BeginTransaction();
            try
            {
                foreach (var item in importedData)
                {

                        Account accountData = new Account()
                        {
                            AccountSiebelCode = item.account_code,
                            AccountName = item.account_name,
                            AccountZip = "",
                            CountryID = 1,
                            AccountRegistration = "",//null allowed
                            AccountDisabled = item.account_status != "active" ? true : false,
                            TMID = 0, //Trademark Id
                            AccountAreaNr = "",
                            Audit_User = User.Identity.Name,
                            VersionDataID = CurrentVersion.Item2,
                            VersionAction = "",//Set at Business
                            TokenKey = GlobalMethods.GetTokenAsync().Result
                        };
                        //string contactUserName = "";

                        string contactUserName = item.last_name.Replace(" ", "").Count() > 4 ? item.last_name.Replace(" ", "").Substring(0, 4) : item.last_name.Replace(" ", "");
                        contactUserName += item.first_name.Substring(0, 1).ToString();
                        Microsoft.AspNet.Identity.PasswordHasher haspwd= new Microsoft.AspNet.Identity.PasswordHasher();

                        Contact contactData = new Contact()
                        {
                            ContactSiebelCode = item.account_code,
                            AccountID = 0, //Account Id
                            ContactFirstName = item.first_name,
                            ContactLastName = item.last_name,
                            ContactTitle = "",
                            ContactType = "",
                            ContactDOB = DateTime.Now, // Dob
                            ContactEmail = item.email,
                            ContactMobile = "",
                            ContactPhone = item.phonenumber,
                            ContactDisabled = false, //contact disabled
                            ContactAppEnabled = true, //contact app enabled
                            UserName = contactUserName, //username
                            //PasswordHash = BCryptEncryption.Encrypt("Gr@fi0ffshore"), //password
                            //PasswordHash = haspwd.HashPassword("Gr@fi0ffshore"), //password
                            PasswordHash ="R1-"+ System.Web.Security.Membership.GeneratePassword(6,1), //password
                            PinCode = "1234", //picode
                            LockOutEnabled = false, //lockout
                            AccessFailedCount = 0, //accessfailedcount
                            Audit_User = User.Identity.Name,
                            VersionDataID = CurrentVersion.Item2,
                            VersionAction = "",//Set at Business
                            TokenKey = GlobalMethods.GetTokenAsync().Result

                        };
                        TradeMarketer tradeMarketerData = new TradeMarketer()
                        {
                            TMSiebelCode = item.account_code,
                            TMFirstName = item.trade_marketeer_firstname,
                            TMLastName = item.trade_marketeer_lastname,
                            TMEmail = "",
                            TMAreaNr = item.region,
                            CountryID = 1, //country id
                            Audit_User = User.Identity.Name,
                            VersionDataId = CurrentVersion.Item2,
                            VersionAction = "",//Set at Business
                            TokeyKey = GlobalMethods.GetTokenAsync().Result
                        };
                        _biznessTradeMarketer.Save(tradeMarketerData);

                        accountData.TMID = tradeMarketerData.TMID;
                        _biznessAccount.Save(accountData);

                        contactData.AccountID = accountData.AccountID;
                        _biznessContact.Save(contactData);

                }
                _uow.SaveChanges();
                _uow.Commit();
            }
            catch (Exception ex)
            {
                _uow.Rollback();
                ModelState.AddModelError("", ex.InnerException);
            }