2015-10-08 2 views
1

У меня возникла проблема при обновлении базы данных с использованием структуры сущности. m_entities набор был изменен, когда метод Update (T х) называется, но SaveChanges() возврата 0. Я имел отлаживать и состояние сущности еще неизменным. Это мой класс репозитория.Не удается обновить объект, используя расширение DbSet

public class Repository<T> : IRepository<T> where T : class 
{ 
    private readonly IApplicationDbContext m_context; 
    internal IDbSet<T> m_entities; 
    public Repository(IApplicationDbContext m_context) 
    { 
     this.m_context = m_context; 
     this.m_entities = this.m_context.Set<T>(); 
    } 
    public void Update(T x) 
    { 
     this.m_entities.AddOrUpdate(x); 
    } 
    public void SaveChanges() 
    { 
     this.m_context.SaveChanges(); 
    } 
} 

DbContext класс

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IApplicationDbContext 
{ 
    public ApplicationDbContext() 
     : base("name=DefaultConnection") 
    { 
     this.Configuration.AutoDetectChangesEnabled = false; 
     this.Configuration.ValidateOnSaveEnabled = false; 
    } 
} 

и строка соединения.

<connectionStrings> 
<!--<add providerName="System.Data.SqlClient" name="DefaultConnection" connectionString="Data Source=LWCGRGTG75SJU9M; Initial Catalog=HPDB; MultipleActiveResultSets=true; Integrated Security=False; User Id=sa; Password=123456"/>--> 

+1

, потому что 'this.Configuration.AutoDetectChangesEnabled' устанавливается в ложь; – Johan

ответ

1

если изменить

this.Configuration.AutoDetectChangesEnabled = false; 

в

this.Configuration.AutoDetectChangesEnabled = true; 

Эффективно, вы сообщаете EF, чтобы не отслеживать изменения и, таким образом, государство всегда будет неизменным.

Если вы хотите, чтобы оставить его, вы можете добавить его к трекеру вручную, как так

this.m_context.Entry(entity).State = EntityState.Added; //or EntityState.Modified