Tôi đang cố gắng tạo một thư viện với một kho lưu trữ chung để sử dụng sau này trong ứng dụng MVC của tôi. Mã này được như sau ...Generic Repository thêm phương thức tùy chỉnh
public abstract class BaseEntity
{
}
public interface IEntity<T>
{
T Id { get; set; }
}
public abstract class Entity<T> : BaseEntity, IEntity<T>
{
public virtual T Id { get; set; }
}
public interface IAuditableEntity
{
int? UsuarioId { get; set; }
DateTime CreatedDate { get; set; }
string CreatedBy { get; set; }
DateTime UpdatedDate { get; set; }
string UpdatedBy { get; set; }
}
public abstract class AuditableEntity<T> : Entity<T>, IAuditableEntity
{
public int? UsuarioId { get; set; }
public DateTime CreatedDate { get; set; }
public string CreatedBy { get; set; }
public DateTime UpdatedDate { get; set; }
public string UpdatedBy { get; set; }
}
public interface IGenericRepository<T> where T : BaseEntity
{
IEnumerable<T> GetAll();
IEnumerable<T> GetByUsuarioId(int usuarioId);
T GetById(int id);
T Add(T entity);
T Delete(T entity);
void Edit(T entity);
void Save();
}
public class GenericRepository<T> : IGenericRepository<T>
where T : BaseEntity
{
protected DbContext _entities;
protected readonly IDbSet<T> _dbset;
public GenericRepository(DbContext context)
{
_entities = context;
_dbset = context.Set<T>();
}
public virtual IEnumerable<T> GetAll()
{
return _dbset.AsEnumerable<T>();
}
public IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate)
{
IEnumerable<T> query = _dbset.Where(predicate).AsEnumerable();
return query;
}
public virtual IEnumerable<T> GetByUsuarioId(int usuarioId)
{
// NO SÉ COMO IMPLEMENTAR ESTE METODO!!!!!
return null;
// NO SÉ COMO IMPLEMENTAR ESTE METODO!!!!!
}
public virtual T GetById(int id)
{
return _dbset.Find(id);
}
public virtual T Add(T entity)
{
return _dbset.Add(entity);
}
public virtual T Delete(T entity)
{
return _dbset.Remove(entity);
}
public virtual void Edit(T entity)
{
_entities.Entry(entity).State = EntityState.Modified;
}
public virtual void Save()
{
_entities.SaveChanges();
}
}
Và đây là một số lớp học của tôi POCO ...
public class Documento : AuditableEntity<int>
{
public string Descripcion { get; set; }
public string Foto { get; set; }
public virtual Usuario Usuario { get; set; }
}
public class Gasto : AuditableEntity<int>
{
public int? TaxiId { get; set; }
public int TipoGastoId { get; set; }
public DateTime Fecha { get; set; }
public double Importe { get; set; }
public int Kilometros { get; set; }
public string Descripcion { get; set; }
public string Foto { get; set; }
public virtual Usuario Usuario { get; set; }
public virtual Taxi Taxi { get; set; }
public virtual TipoGasto TipoGasto { get; set; }
public virtual PartidaTarjetas PartidaTarjetas { get; set; }
public virtual ICollection<Tarea> Tareas { get; set; }
public int? PartidaTarjetasId { get; set; }
public Gasto()
{
Tareas = new List<Tarea>();
}
}
public class Nivel : Entity<int>
{
public string Descripcion { get; set; }
public string PaginaInicio { get; set; }
public virtual ICollection<Usuario> Usuarios { get; set; }
public Nivel()
{
Usuarios = new List<Usuario>();
}
}
Vấn đề của tôi là nó sẽ không thực hiện phương pháp này ...
public virtual IEnumerable<T> GetByUsuarioId(int usuarioId)
{
// NO SÉ COMO IMPLEMENTAR ESTE METODO!!!!!
return null;
// NO SÉ COMO IMPLEMENTAR ESTE METODO!!!!!
}
Đây là phương pháp chung mà chỉ trả về kết quả khi là loại IAuditable ..., phải là một cái gì đó ...
public virtual IEnumerable<T> GetByUsuarioId(int usuarioId)
{
return _dbset.FindBy(c => c.UsuarioId == usuarioId);
}
Bạn có thể giúp tôi không ?, Cảm ơn.
Hello C Bauer ...
Lưu ý rằng ...
public abstract class BaseEntity
{
}
public interface IEntity<T>
{
T Id { get; set; }
}
public abstract class Entity<T> : BaseEntity, IEntity<T>
{
public virtual T Id { get; set; }
}
public interface IAuditableEntity
{
int? UsuarioId { get; set; }
DateTime CreatedDate { get; set; }
string CreatedBy { get; set; }
DateTime UpdatedDate { get; set; }
string UpdatedBy { get; set; }
}
public abstract class AuditableEntity<T> : Entity<T>, IAuditableEntity
{
public int? UsuarioId { get; set; }
public DateTime CreatedDate { get; set; }
public string CreatedBy { get; set; }
public DateTime UpdatedDate { get; set; }
public string UpdatedBy { get; set; }
}
Và GenericRepositry của tôi là ..
public interface IGenericRepository<T> where T : BaseEntity
Sau đó tại ¿?
public interface IGenericRepository<T> where T : ¿¿ ??
Bạn chỉ đang cố gắng đảm bảo rằng tham số chung 'T' thực hiện' IAuditable'? Đó là mục đích của các ràng buộc chung: http://msdn.microsoft.com/en-us/library/d5x73970.aspx. –
Ví dụ: Documento.cs triển khai AuditableEntity ... –
@ JesúsSánchez Xin chào Chúa Giêsu, bạn nên tránh chỉnh sửa người dùng khác vào câu trả lời của bạn. Thay vào đó, hãy thêm nhận xét để trả lời giải quyết vấn đề bạn gặp phải với mã của họ. –