C# 为通用存储库中的列设置值
我正在使用通用存储库和UnitOfWork模式来处理数据库 现在我有一个Insert方法,如下所示:C# 为通用存储库中的列设置值,c#,repository-pattern,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)
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; }
}
公共部分类AM\U用户
{
public int UserID{get;set;}
公共字符串用户名{get;set;}
公共可为空的CreatedDate{get;set;}
公共可为Null的UpdateDate{get;set;}
}
该实体有一个名为
CreatedDate
的列。我只想在一个地方输入CreatedDate的值?如何使用reflector设置其值?最安全的方法是确保所有实体类实现相同的接口,例如:
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 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...
}
您可以通过反射来实现:
typeof(TEntity).GetProperty("UpdatedDate").SetValue(entity, DateTime.Now.AddMonth(-1));
您可以通过反射来实现:
typeof(TEntity).GetProperty("UpdatedDate").SetValue(entity, DateTime.Now.AddMonth(-1));
嗨,大卫,谢谢你的帮助。但我的实体是一个表示表的类,由PowerTool生成,我不能按照您的建议再创建一个实体。我更新了问题以便更清楚地回答。请给出建议。实际上,由于生成的类是部分的,您可以添加自己的文件来扩展该类并向其添加接口。嗨,DavidG,谢谢您的帮助。但我的实体是一个表示表的类,由PowerTool生成,我不能按照您的建议再创建一个实体。我更新了问题以便更清楚地回答。请给出建议。实际上,由于生成的类是部分的,您可以添加自己的文件来扩展该类并向其添加接口。