我正在为我的应用编写一个简单的日志记录机制。
我有通用存储库:
public class GenericRepository<TEntity>:IRepository<TEntity> where TEntity : class
{
internal Equipment_TestEntities context;
internal DbSet<TEntity> dbSet;
internal Log entry;
public GenericRepository(Equipment_TestEntities context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
this entry= new Log();
}
public virtual void Insert(TEntity entity)
{
dbSet.Add(entity);
AddLog("insert "+typeof(TEntity)+" "+entity.ToString());
}
private void AddLog(string action)
{
entry.Action = action;
entry.Date = DateTime.Now;
string username = HttpContext.Current.User.Identity.Name;
username = username.Substring(username.LastIndexOf("\\") + 1);
entry.Who = 1;
context.Logs.Add(entry);
}
}
我希望保留entry.Action
:
1)我可以很容易地采取行动
2)我可以使用TypeOf
并获取实体类名称
但是在第3节我有点问题。 在插入的情况下,我可以向db请求最新记录,但在编辑/删除案例中应该怎么办? 有没有办法从这些实体中获取属性值?
@Update:
来自unitOfWork的样本部分:
public IRepository<Storage> storageRepository
{
get
{
if (this.StorageRepository == null)
{
this.StorageRepository = new GenericRepository<Storage>(context);
}
return StorageRepository;
}
}
IUnitOfWork: 公共接口IUnitOfWork:IDisposable { IRepository storageRepository {get; } }
答案 0 :(得分:1)
我将为实体创建一个界面:
public interface IEntity
{
int? Id { get; set; }
}
然后更改通用约束:
public class GenericRepository<TEntity>:IRepository<TEntity>
where TEntity : class, IEntity
{
...
}
现在您可以简单地使用entity.Id来识别您的实体。:
public virtual void Remove(TEntity entity)
{
if (!entity.Id.HasValue) {
throw new Exception("Cannot remove " + entity + ", it has no ID");
}
...
}