实体框架不会更新位值

时间:2016-10-17 05:40:57

标签: entity-framework entity-framework-6

我对实体框架有一个奇怪的问题,在我的项目中使用EF 6 codefirst和我的数据库即时使用sqlserver 2012

与表iam一样,使用bit类型的isactive列,它仅代表0或1。默认情况下,我将此列值保持为1,表示为真。

当我们想要从表中删除记录时,我们应该使1到0,但实体框架不会更新该值。

任何一个有这个奇怪问题的人都有解决方案吗?

代码:

 using (var context = new TriviaContext())
            {

                var booking = context.Booking.FirstOrDefault(b => b.BookingId == id);
                context.Entry(booking).Property(u => u.IsActive).IsModified=true;
                booking.IsActive = false;


                context.SaveChanges();

                return Ok(booking);
            }

预订模式:

class Booking
{
 public int BookingId { get; set; }
 public string Name{get;set;}
 [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
 public bool? IsActive { get; set; }
}

编辑:实际上我在我的模型类中包含了DatabaseGenerated属性,可能这是导致问题的?

TriviaContext:

public class TriviaContext : DbContext
{
    public TriviaContext()
        : base("name=DefaultConnection")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
    public DbSet<Bookings> Booking { get; set; }
}

3 个答案:

答案 0 :(得分:1)

我正在使用[DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性来默认生成值,但这导致我实体框架dint生成sql来更新记录,所以当我删除这个属性时EF能够生成更新的东西。所以我现在可以继续我的工作。但这种编码是对还是错......任何有经验的人都可以建议我解决这个问题......

此致 BOSH

答案 1 :(得分:0)

试试这个:

     using (var context = new TriviaContext())
        {
       var booking  = (from x in context.Booking
         where x.BookingId == id
         select x).First();

            booking.IsActive = false;
            context.SaveChanges();

            return Ok(booking);
        }

答案 2 :(得分:0)

加载并跟踪实体,因此无需使用Entry方法更改属性值,只需更改并保存实体

using (var context = new TriviaContext())
            {

                var booking = context.Booking.Find(id);
                booking.IsActive = false;
                context.SaveChanges();

                return Ok(booking);
            }