저장소 + unti od 작업 패턴을 사용하여 내 EF 함께 이상한 동작이 있습니다.asp.net 4.5 엔터티 프레임 워크
문제는 내가 사용자를 생성하고 그에게 역할, 대상 페이지에 리디렉션을 할당 할 때 내가 GetRolesForUser를 오버라이드 (override) 내 RoleProvider에서, 그래서 특정 역할을 필요로한다는 것입니다 :
public override string[] GetRolesForUser(string username)
{
string[] listRoles = unitOfWork.RoleRepository.Find(r => r.Utilisateurs.Any(u => u.Login == username)).ToList().Select(r => r.Nom).ToArray<string>();
return listRoles;
}
에서 이 순간 데이터베이스의 사용자는 이미 생성되었지만 자신의 역할은 나타나지 않습니다.
나는이 새로운 버전으로 코드를 변경 :
public override string[] GetRolesForUser(string username)
{
string[] listRoles;
Utilisateur user = unitOfWork.UtilisateurRepository.Find(u => u.Login == username).FirstOrDefault();
if (user != null)
listRoles = user.Roles.Select(r => r.Nom).ToList().ToArray();
else
{
listRoles = new string[1];
listRoles[0] = "";
}
return listRoles;
}
는 정보를, 나는 요청에 따라 작업 단위를 사용합니다. 모두는 MembershipProvider 및 RoleProvider 클래스
, 내가 사용private IUnitOfWork unitOfWork = new UnitOfWork();
내 DAL에서
내가 일반적인 저장소를 사용public class GenericRepository<T> : IRepository<T> where T : class
{
internal DVEntities context;
internal IDbSet<T> dbset;
public GenericRepository(DVEntities context)
{
this.context = context;
this.dbset = context.Set<T>();
}
public IUnitOfWork UnitOfWork
{
get;
set;
}
public IQueryable<T> All()
{
return dbset.AsQueryable();
}
//public IQueryable<T> Find(Func<T, bool> expression)
public IQueryable<T> Find(Func<T, bool> expression)
{
return dbset.Where(expression).AsQueryable();
}
public void Add(T entity)
{
dbset.Add(entity);
}
public void Attach(T entity)
{
dbset.Attach(entity);
}
public void Detach(T entity)
{
((IObjectContextAdapter)context).ObjectContext.Detach(entity);
}
public void Delete(T entity)
{
if (context.Entry(entity).State == EntityState.Detached)
{
dbset.Attach(entity);
}
dbset.Remove(entity);
}
public void Update(T entityToUpdate)
{
dbset.Attach(entityToUpdate);
//dbset.Add(entityToUpdate);
context.Entry(entityToUpdate).State = EntityState.Modified;
}
public void Save()
{
context.SaveChanges();
}
}
사람이 나에게 문제를하시기 바랍니다 설명 할 수 있습니까?
감사합니다.
나는 정확하게 당신의 질문을 이해하지 못한다. (정확히 작동하지 않는 이유는 무엇인가? 결과는 무엇인가? GetRolesForUser의 두 번째 버전이 처음에는 작동하지 않습니까? 아니면 둘 다 작동하지 않습니까? – Slauma
아마도 여기에있는 문제와 유사 할 수 있습니다 : http://stackoverflow.com/a/12681527/861716. 호출 당 새로운 'unitOfWork'를 시도하십시오. –