2017-04-13 49 views
0

我正在使用通用Repository和UnitOfWork模式来处理数据库。设置Generic Repository中的列的值

现在我有如下的插入方法:

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

您可以通过反射回复:

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

这部分代码真的很有帮助。 – gdmanandamohon

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... 
} 
+0

嗨DavidG,感谢您的帮助。但是我的实体是一个代表表格并由PowerTool生成的类,我不能根据你的建议创建一个实体。我更清楚地更新了问题。 请指教。 –

+0

实际上,因为生成的类是部分的,您可以添加自己的文件来扩展该类并将接口添加到它。 – DavidG