2016-10-17 69 views
3

我与实体框架一个奇怪的问题,在使用EF 6 codefirst我的项目IM和使用的isactive柱使用SQLSERVER 2012实体框架不更新位值

与表IAM我的数据库IM类型位,它只代表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; } 
} 
+0

你能展示一些代码,表结构? – Danh

+0

你能显示代码吗? – Sampath

+0

以及EF没有生成更新代码... – user3768179

回答

0

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

问候 波什

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); 
     } 
+0

不工作..我试过了 – user3768179

0

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

using (var context = new TriviaContext()) 
      { 

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

       return Ok(booking); 
      }