首页 > 解决方案 > SaveChanges() 不会向数据库中插入任何记录

问题描述

我正在使用 Entity Framework 向数据库添加新记录,一切正常,没有任何错误,但我没有在数据库中看到新记录。

更新代码有效,但插入代码无效。没有出现错误,但没有记录插入到数据库中。

我的代码:

var DBs2 = ConnectionTools.OpenConn();
DBs2.Configuration.AutoDetectChangesEnabled = false;
DBs2.Configuration.ValidateOnSaveEnabled = false;

var resList = CreatedSerials.Where(u => u.Item4 == VID).ToList();

foreach (var r in resList)
{
    // if serial id ==0 => new then add it as new
    if ( r.Item7 == 0)
    {
        try
        {
            var purchasesItemSerials = new purchases_item_seriels()
                                {
                                    pitem_ID = pitem_ID,
                                    stitems_ID = r.Item1,
                                    pmain_ID = PurchasesID,
                                    pitem_virtualID = r.Item4,
                                    pis_CustomSerial = r.Item2,
                                    pis_ExpireDate = r.Item3,
                                    pis_Statues = 0,
                                    ss_StoreID = Convert.ToInt32(gridView1.GetRowCellValue(ItemImdex, "storeID")),
                                    Purchases_Price = Convert.ToDecimal(gridView1.GetRowCellValue(ItemImdex, "item_NetSmallestUnitPrice")),
                                };
            ss.Add(purchasesItemSerials);
        }
        catch (Exception eeeeee)
        {
            Msg.Show("", eeeeee.ToString(), 0);return;
        }
    } 
    else
    {
        var DBs350 = ConnectionTools.OpenConn();

        var UpdateSerial = DBs350.purchases_item_seriels.Find(r.Item7);

        UpdateSerial.pitem_ID = pitem_ID;
        UpdateSerial.stitems_ID = r.Item1;
        UpdateSerial. pmain_ID = PurchasesID;
        UpdateSerial.pitem_virtualID = r.Item4;
        UpdateSerial.pis_CustomSerial = r.Item2;
        UpdateSerial.pis_ExpireDate = r.Item3;
        UpdateSerial.pis_Statues = r.Item6;
        UpdateSerial.ss_StoreID = Convert.ToInt32(gridView1.GetRowCellValue(ItemImdex, "storeID"));
        UpdateSerial.Purchases_Price = Convert.ToDecimal(gridView1.GetRowCellValue(ItemImdex, "item_NetSmallestUnitPrice"));

        DBs350.SaveChanges();
    }
}

try
{
    DBs2.purchases_item_seriels.AddRange(ss);
    DBs2.SaveChanges();
}
catch (Exception eeeeee)
{
    Msg.Show("", eeeeee.ToString(), 0);return;
}

我也试过:

DBs2.Configuration.AutoDetectChangesEnabled = true;
DBs2.Configuration.ValidateOnSaveEnabled = true;

但同样:没有插入数据,没有出现错误

我也试过:

int returnCode = DBs2.SaveChanges();
and returnCode = 0

**我也试过:只插入一个项目然后 SaveChanges **

// if this serial is new
                    var NewSerialresList = CreatedSerials.Where(u => u.Item4 == VID && u.Item7 == 0).ToList();
                    if (NewSerialresList.Count() > 0)
                    {

                        var ss = new List<purchases_item_seriels>();

                        foreach (var r in NewSerialresList)
                        {
                            try
                            {
                                mrsalesdbEntities DBs002 = new mrsalesdbEntities();
                                var purchasesItemSerials = new purchases_item_seriels()
                                {
                                    pitem_ID = pitem_ID,
                                    stitems_ID = r.Item1,
                                    pmain_ID = PurchasesID,
                                    pitem_virtualID = r.Item4,
                                    pis_CustomSerial = r.Item2,
                                    pis_ExpireDate = r.Item3,
                                    pis_Statues = 0,
                                    ss_StoreID = Convert.ToInt32(gridView1.GetRowCellValue(ItemImdex, "storeID")),
                                    Purchases_Price = Convert.ToDecimal(gridView1.GetRowCellValue(ItemImdex, "item_NetSmallestUnitPrice")),
                                };
                                //ss.Add(purchasesItemSerials);
                                DBs002.purchases_item_seriels.Add(purchasesItemSerials);
                                DBs002.SaveChanges();
                            }
                            catch (Exception ex)
                            {
                                Msg.Show("", ex.ToString(), 0);
                            }

                        }

                        int CC = ss.Count();

                    }

我使用此函数在运行时更改连接变量:

public static mrsalesdbEntities OpenConn()
        {
            mrsalesdbEntities MrSalesContext = new mrsalesdbEntities();
            MrSalesContext.ChangeDatabase
               (
                   initialCatalog: myconn.database,
                   port: Convert.ToUInt32( myconn.port),
                   userId: myconn.uid,
                   password: myconn.password,
                   dataSource: myconn.server
            );
            return MrSalesContext;
        }

public static void ChangeDatabase(
            this DbContext source,
            string initialCatalog = "",
            uint port = 3307,
            string dataSource = "",
            string userId = "",
            string password = "",
            bool integratedSecuity = true,
            string configConnectionStringName = "mrsalesdbEntities")
        /* this would be used if the
        *  connectionString name varied from 
        *  the base EF class name */
        {
            try
            {
                // use the const name if it's not null, otherwise
                // using the convention of connection string = EF contextname
                // grab the type name and we're done
                var configNameEf = string.IsNullOrEmpty(configConnectionStringName)
                    ? source.GetType().Name
                    : configConnectionStringName;

                // add a reference to System.Configuration
                var entityCnxStringBuilder = new EntityConnectionStringBuilder
                    (System.Configuration.ConfigurationManager
                        .ConnectionStrings[configNameEf].ConnectionString);

                // init the sqlbuilder with the full EF connectionstring cargo
                var sqlCnxStringBuilder = new MySqlConnectionStringBuilder
                    (entityCnxStringBuilder.ProviderConnectionString);

                // only populate parameters with values if added
                if (!string.IsNullOrEmpty(initialCatalog))
                    sqlCnxStringBuilder.Database = initialCatalog;
                if ((port) != 0)
                    sqlCnxStringBuilder.Port = port;
                if (!string.IsNullOrEmpty(dataSource))
                    sqlCnxStringBuilder.Server = dataSource;
                if (!string.IsNullOrEmpty(userId))
                    sqlCnxStringBuilder.UserID = userId;
                if (!string.IsNullOrEmpty(password))
                    sqlCnxStringBuilder.Password = password;

                // set the integrated security status
                //sqlCnxStringBuilder.IntegratedSecurity = integratedSecuity;

                // now flip the properties that were changed
                source.Database.Connection.ConnectionString
                    = sqlCnxStringBuilder.ConnectionString;
            }
            catch (Exception ex)
            {
                // set log item if required
            }
        }
    }

标签: c#entity-framework

解决方案


推荐阅读