EF 6.1.3 ve Oracle kullanıyorum. İki seans var. İlk oturumda ikinci oturumun güncellenmiş değerlerini görüntüleyemiyorum.Entity Framework, diğer oturumların güncelleştirilmiş değerlerini göremiyor
using (var uow = new DmsUOW()
{
var var1 = uow.RoleTypeRepository.Get(p => p.ID == 3).Single().NAME; // var1 = ADMIN5
//I change my data ADMIN5-> ADMIN6 from other session(TOAD) and commit.
var var2 = uow.RoleTypeRepository.Get(p => p.ID == 3).Single().NAME; //var1 = ADMIN5 ---> WRONG!!! it must be ADMIN6
}
Depo:
public class DmsUOW : UnityOfWorkEF
{
private ROLE_TYPE_Repository _roleTypeRepository;
public ROLE_TYPE_Repository RoleTypeRepository
{
get { return _roleTypeRepository ?? (_roleTypeRepository = new ROLE_TYPE_Repository(this)); }
}
}
RepositoryEf sınıfı:
public class RepositoryEf<TEntity> :BaseRepositoryEf, IRepository<TEntity> where TEntity : class
{
protected DbSet<TEntity> objectSet;
public virtual IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> expression)
{
return objectSet.Where(expression).AsQueryable<TEntity>();
}
}
myDbContext ayarları:
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
Configuration.ValidateOnSaveEnabled = false;
Ama sql sorgusu yazarken iyi çalışır:
using (var uow = new DmsUOW()
{
var var1 = uow.RoleTypeRepository.GetMyQuery(3).Single().NAME;
var var2 = uow.RoleTypeRepository.GetMyQuery(3).Single().NAME;
}
RoleTypeRepository:
public class ROLE_TYPE_Repository : RepositoryEf<ROLE_TYPE>
{
public ROLE_TYPE_Repository(IUnityOfWork UnityOfWork) : base(UnityOfWork) { }
public List<ROLE_TYPE> GetMyQuery(int? id)
{
return this.Query<ROLE_TYPE>("SELECT * FROM ROLE_TYPE WHERE id = :p1", new OracleParameter("p1", id)).ToList();
}
}
Mükemmel. 4. 'u seçtim Ayrıca, sorguyu DB'ye gönderdiği değerleri önbelleğe alır. Oturum sorgularını takip ettik. Neden böyle yapıyor? AsNoTracking yolunda Find yöntemi yok mu? Bunu nasıl uygulayabilirim? Genel sanal TEntity GetByID (nesne kimliği) { return objectSet.AsNoTracking() Find (id); } –
@AdemAyg performans nedeniyle: mağaza/veritabanına bir sorgu gönderimi (genellikle) bir bellek içi koleksiyonunu kontrol etmekten çok daha pahalı. – Jcl
Ayrıca, sorguyu DB'ye gönderdiği değerleri önbelleğe alır. Oturum sorgularını takip ettik. Neden böyle yapıyor? 2.question: AsNoTracking'in Find yöntemine sahip olmadığı yol mu? Bunu nasıl uygulayabilirim? genel sanal TEntity GetByID (nesne kimliği) {return objectSet.AsNoTracking(). } - @Jcl –