엔티티 프레임워크 컨텍스트 새로 고침?
컨텍스트를 새로 고치려면 어떻게 해야 합니까?데이터베이스의 보기를 기반으로 엔티티가 있으며 보기에 대한 탐색 속성이 있는 하나의 테이블 엔티티를 업데이트했을 때 엔티티는 업데이트되었지만 보기가 새 업데이트에 따라 새로 고쳐지지 않습니다...DB에서 데이터를 다시 얻고 싶을 뿐입니다.감사합니다!
컨텍스트에서 엔티티를 새로 고치는 가장 좋은 방법은 컨텍스트를 폐기하고 새 컨텍스트를 만드는 것입니다.
엔티티를 새로 고쳐야 하고 DbContext 클래스와 함께 CodeFirst 접근 방식을 사용하는 경우,
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
컬렉션 탐색 속성을 다시 로드하려면 다음을 사용할 수 있습니다.
public static void ReloadNavigationProperty<TEntity, TElement>(
this DbContext context,
TEntity entity,
Expression<Func<TEntity, ICollection<TElement>>> navigationProperty)
where TEntity : class
where TElement : class
{
context.Entry(entity).Collection<TElement>(navigationProperty).Query();
}
참조: https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry.Reload
yourContext.Entry(yourEntity).Reload();
DbContextApi를 사용하여 특정 엔터티를 다시 로드하려면 RX_DID_RX가 이미 응답을 제공했습니다.
로드한 모든 엔티티를 다시 로드/새로 고침하려면 다음을 수행합니다.
Entity Framework 4.1+(EF5 또는 EF6)를 사용하는 경우 DbContext API:
public void RefreshAll()
{
var entitiesList = ctx.ChangeTracker.Entries().ToList();
foreach (var entity in entitiesList)
{
entity.Reload();
}
}
엔티티 프레임워크 4(ObjectContext API)를 사용하는 경우:
public void RefreshAll()
{
// Get all objects in statemanager with entityKey
// (context.Refresh will throw an exception otherwise)
var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted
| EntityState.Modified
| EntityState.Unchanged)
where entry.EntityKey != null
select entry.Entity);
context.Refresh(RefreshMode.StoreWins, refreshableObjects);
}
어쨌든 가장 좋은 조언은 "짧은 시간의 맥락"을 사용하는 것입니다. 그러면 여러분은 이런 종류의 문제를 피할 수 있을 것입니다.
저는 그 문제에 대해 몇 편의 기사를 썼습니다.
새로 고침 방법 사용:
context.Refresh(RefreshMode.StoreWins, yourEntity);
또는 현재 컨텍스트를 삭제하고 새 컨텍스트를 만듭니다.
맥락.저는 MVC 4, EF 5에서 Reload()가 작동하지 않아서 이렇게 했습니다.
context.Entry(entity).State = EntityState.Detached;
entity = context.Find(entity.ID);
그리고 그것은 잘 작동합니다.
EF 6
제 시나리오에서는 Entity Framework가 새로 업데이트된 데이터를 가져오지 않았습니다.데이터가 범위를 벗어나 업데이트되었기 때문일 수 있습니다.가져오기 후 데이터를 새로 고치면 문제가 해결되었습니다.
private void RefreshData(DBEntity entity)
{
if (entity == null) return;
((IObjectContextAdapter)DbContext).ObjectContext.RefreshAsync(RefreshMode.StoreWins, entity);
}
private void RefreshData(List<DBEntity> entities)
{
if (entities == null || entities.Count == 0) return;
((IObjectContextAdapter)DbContext).ObjectContext.RefreshAsync(RefreshMode.StoreWins, entities);
}
성능 손실로 인해 다시 로드를 사용하여 DB 컨텍스트를 새로 고치는 방법은 권장되지 않습니다.각 작업을 실행하기 전에 DB 컨텍스트의 새 인스턴스를 초기화하는 것이 좋습니다.또한 각 작업에 대한 최신 컨텍스트를 새로 고칩니다.
using (YourContext ctx = new YourContext())
{
//Your operations
}
언급URL : https://stackoverflow.com/questions/20270599/entity-framework-refresh-context
'programing' 카테고리의 다른 글
오류: iOS9에서 _실행되지 않는 특정 작업 처리 (0) | 2023.04.26 |
---|---|
Azure Functions Temp 저장소 (0) | 2023.04.26 |
WPF 응용 프로그램에서 FolderBrowserDialog를 사용하는 방법 (0) | 2023.04.26 |
주피터 노트북에서 env 변수 설정 방법 (0) | 2023.04.26 |
각도 4의 URL에서 매개 변수를 가져오는 방법은 무엇입니까? (0) | 2023.04.26 |