使用方法表单泛型类表单接口



i 在此类中使用通用服务和写入方法。

public class EfGenericService<T> : IGenericService<T> where T : class
{
protected IUnitOfWork Uow;
protected IDbSet<T> Entites;
public EfGenericService(IUnitOfWork uow)
{
Uow = uow;
Entites = Uow.Set<T>();
}
public virtual ResultStatus Add(T entity)
{
ResultStatus rs = new ResultStatus();
try
{
Entites.Add(entity);
Uow.MarkAsAdded(entity);
rs.IsSuccessed = true;
rs.Type = MessageType.Success;
//rs.Message = .Data_Saved_Successfully;
return rs;
}
catch (Exception e)
{
rs.IsSuccessed = false;
rs.Type = MessageType.Danger;
rs.ErrorException = e;
//rs.Message = Messages.Error_In_Saving_Data;
}
return rs;
}
public virtual ResultStatus Update(T entity)
{
ResultStatus rs = new ResultStatus();
try
{
Entites.Attach(entity);
Uow.MarkAsChanged(entity);
rs.IsSuccessed = true;
rs.Type = MessageType.Success;
//rs.Message = Messages.Data_Edited_Successfully;
return rs;
}
catch (Exception e)
{
rs.IsSuccessed = false;
rs.Type = MessageType.Danger;
rs.ErrorException = e;
//rs.Message = Messages.Error_In_Editing_Data;
}
return rs;
}
public virtual ResultStatus UpdateAll(IQueryable<T> updateEntites, Expression<Func<T, T>> updatExpression)
{
ResultStatus rs = new ResultStatus();
try
{
updateEntites.Update(updatExpression);
rs.IsSuccessed = true;
rs.Type = MessageType.Success;
//rs.Message = Messages.Data_Edited_Successfully;
return rs;
}
catch (Exception e)
{
rs.IsSuccessed = false;
rs.Type = MessageType.Danger;
rs.ErrorException = e;
//rs.Message = Messages.Error_In_Editing_Data;
}
return rs;
}
public virtual ResultStatus Delete(T entity)
{
ResultStatus rs = new ResultStatus();
try
{
Entites.Remove(entity);
rs.IsSuccessed = true;
rs.Type = MessageType.Success;
//rs.Message = Messages.Data_Removed_Successfully;
return rs;
}
catch (Exception e)
{
rs.IsSuccessed = false;
rs.Type = MessageType.Danger;
rs.ErrorException = e;
//rs.Message = Messages.Error_In_Removing_Data;
}
return rs;
}
public virtual ResultStatus DeleteAll(IQueryable<T> deleteEntites)
{
ResultStatus rs = new ResultStatus();
try
{
Uow.Set<T>().RemoveRange(deleteEntites.AsEnumerable());
rs.IsSuccessed = true;
rs.Type = MessageType.Success;
//rs.Message = Messages.Data_Removed_Successfully;
return rs;
}
catch (Exception e)
{
rs.IsSuccessed = false;
rs.Type = MessageType.Danger;
rs.ErrorException = e;
//rs.Message = Messages.Error_In_Removing_Data;
}
return rs;
}
public virtual IEnumerable<ResultStatus> ValidateCreate(T entity)
{
return new List<ResultStatus>().AsEnumerable();
}
public virtual IEnumerable<ResultStatus> ValidateUpdate(T entity)
{
return new List<ResultStatus>().AsEnumerable();
}
public T Find(Func<T, bool> predicate)
{
return Entites.Where(predicate).FirstOrDefault();
}
public IList<T> GetAll(bool asNoTracking = false)
{
return asNoTracking ? Entites.AsNoTracking().ToList() : Entites.ToList();
}
public IQueryable<T> GetAllAsQueryable(bool asNoTracking = false)
{
return asNoTracking ? Entites.AsNoTracking().AsQueryable() : Entites.AsQueryable();
}
public IList<T> GetAll(Func<T, bool> predicate, bool asNoTracking = false)
{
return asNoTracking ? Entites.AsNoTracking().Where(predicate).ToList() : Entites.Where(predicate).ToList();
}
public IQueryable<T> GetAllAsQueryable(Func<T, bool> predicate, bool asNoTracking = false)
{
return asNoTracking ? Entites.AsNoTracking().Where(predicate).AsQueryable() : Entites.Where(predicate).AsQueryable();
}
public IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> query = Uow.Set<T>();
return includeProperties.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
}
#region IDisposable Members
public void Dispose()
{
throw new NotImplementedException();
}
#endregion
}

和这个接口:

public interface IGenericService<T> : IDisposable where T : class
{
ResultStatus Add(T entity);
ResultStatus Update(T entity);
ResultStatus UpdateAll(IQueryable<T> updateEntites, Expression<Func<T, T>> updateExpression);
ResultStatus Delete(T entity);
ResultStatus DeleteAll(IQueryable<T> deleteEntites);
IEnumerable<ResultStatus> ValidateCreate(T entity);
IEnumerable<ResultStatus> ValidateUpdate(T entity);
T Find(Func<T, bool> predicate);
IList<T> GetAll(bool asNoTracking = false);
IQueryable<T> GetAllAsQueryable(bool asNoTracking = false);
IList<T> GetAll(Func<T, bool> predicate, bool asNoTracking = false);
IQueryable<T> GetAllAsQueryable(Func<T, bool> predicate, bool asNoTracking = false);
IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
}

我在UserEntite 中使用了这个泛型类。

public interface IUser : IGenericService<User>
{
}

.class:

public class EFUserService : EfGenericService<User>, IUser
{
public EFUserService(IUnitOfWork uow) : base(uow)
{
}
}

现在. 我需要在EfGenericService中使用Find方法获取登录代码。

我在课堂上使用它private readonly IUser _userservice;

但它找不到Find方法。 问题是什么? 我该如何解决这个问题?

更新

EFUserService中编写以下登录代码:

public User FindUser(string username, string password)
{
return Find(x => x.Username == username && x.Password == password);
}
}

EFUserService其他类库中,我需要在主程序中使用此方法。

现在我在主程序中编写这段代码:

`private readonly IUser _userservice;`

它找不到FindUser.

随着问题的更新,这是我的新答案:

FindUser不是IUser的一部分。它仅在EFUserService中声明。

因此,请在主程序中尝试此操作:

private readonly EFUserService _userservice;

如果要将其保留为IUser可以执行以下操作:

private readonly IUser _userservice = new EFUserService();
// ...
(_userservice as EFUserService).FindUser(...);

最新更新