在通用存储库

时间:2017-04-13 03:17:15

标签: c# repository-pattern

我使用通用存储库和UnitOfWork模式来处理数据库。

现在我有一个Insert方法如下:

public virtual void Insert(TEntity entity)
{
    //How to set up like this 
    entity.UpdatedDate = DateTime.Now.AddMonth(-1);

    entity.ObjectState = ObjectState.Added; 
    _dbSet.Attach(entity);
    _context.SyncObjectState(entity);
}

实体是一个代表表的类,如下所示:

  public partial class AM_User
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public Nullable<System.DateTime> CreatedDate { get; set; }
        public Nullable<System.DateTime> UpdatedDate { get; set; }
    }

该实体有一个名为CreatedDate的列。我只想要一个地方输入CreatedDate的价值?我如何使用反射器来设置其值?

2 个答案:

答案 0 :(得分:3)

你可以通过反思来做到这一点:

typeof(TEntity).GetProperty("UpdatedDate").SetValue(entity, DateTime.Now.AddMonth(-1));

答案 1 :(得分:1)

最安全的方法是确保所有实体类都实现相同的接口,例如:

public interface IEntity
{
    DateTime CreatedDate { get; set; }
}

public class MyEntity : IEntity
{
    public string Name { get; set; }
    public DateTime CreatedDate { get; set; }
}

并更改您的存储库以对泛型类型进行约束:

public class Repository<TEntity> where T : IEntity
{
    //etc...
}

现在您的插入功能可以更改为:

public virtual void Insert(TEntity entity)
{
    entity.CreatedDate = DateTime.Now;
    //etc...
}