实体框架6不保存更改

时间:2017-07-06 06:41:32

标签: c# entity-framework-6 asp.net-mvc-5 savechanges

我有一个MVC5 Web应用程序,它使用SQL Server 2008作为后端数据库以及Entity Framework 6.添加代码没有错误,但数据无法存储到数据库中。

我的模型context.cs看起来像

public partial class checkin_checkoutEntities2 : DbContext
    {
        public checkin_checkoutEntities2()
            : base("name=checkin_checkoutEntities2")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Advance_Booking> Advance_Bookings { get; set; }
        public virtual DbSet<employee_reg> employee_reg { get; set; }
        public virtual DbSet<Extend_Stay> Extend_Stay { get; set; }
        public virtual DbSet<Guest_reg> Guest_reg { get; set; }
        public virtual DbSet<RoomBooking> RoomBooking { get; set; }
        public virtual DbSet<Rooms_ms> Rooms_ms { get; set; }
    } 

我的添加方法如下

 ab.Room_id = Convert.ToInt32(ab_rm_no.room_id);
                                ab.Guest_id = Convert.ToInt32(frm["guest_id"].ToString());
                                ab.Expected_checkin  = Convert.ToDateTime(frm["BookedDateFR"].ToString());
                                ab.Expected_checkout = Convert.ToDateTime(frm["BookedDateTO"].ToString());
                                db.Advance_Bookings.Add(ab);
                                db.SaveChanges();

2 个答案:

答案 0 :(得分:0)

您可以稍微更改一下代码并尝试以下操作: 而是使用db.Advance_Bookings.Add(ab),您可以使用以下内容:

db.Entry(ab).State = EntityState.Added;

此外,据我所知,只有在DbContext断开连接时才会出现此问题(因为它没有给出任何错误)。 您可以尝试将代码包装在using块

using (var ab = new DbContext()) 
{
//instantiate the object and saveChanges.
}

答案 1 :(得分:0)

根据评论,db.SaveChanges();已包含在交易中

using (var transaction = new System.Transactions.TransactionScope())
{
    // some changes and db.SaveChanges();
}

并且它只在没有交易的情况下工作。

原因是,需要提交事务才能保留已保存的更改。

using (var transaction = new System.Transactions.TransactionScope())
{
    // some changes and db.SaveChanges();

    transaction.Commit();
}

否则,更改将在事务块结束时被丢弃。