我正在寻找一种方法来自动生成记录,每当我有一个类持久化到数据库,没有触发器或数据库函数。
我的classe Item就是那样的
/// <summary>
/// Modelo de representação do Item (Produto)
/// </summary>
[Table("Item")]
public class Item : History
{
/// <summary>
/// Id único gerador pelo sistema
/// </summary>
[Key]
public long Id { get; set; }
/// <summary>
/// Nome do produto
/// </summary>
public string Name { get; set; }
/// <summary>
/// Código de barras
/// </summary>
public string BarCode { get; set; }
/// <summary>
/// Código da imagem do produto na base de dados
/// </summary>
public long Image_Id { get; set; }
}
我的Item类的Item有一个插件来保存它。像那样
/// <summary>
/// Repositório do objeto Item
/// </summary>
public class ItemRepository : BaseRepository<Item>
{
#region Constructors
/// <summary>
/// Inicializa o repositório de Item
/// </summary>
/// <param name="context">Contexto usado em sua inicialização</param>
public ItemRepository(DbContext context) : base(context)
{
}
#endregion
#region Methods
public override void Insert(Item entity)
{
base.Insert(entity);
}
#endregion
}
我的问题是:我如何为我的objetc Item__History生成一条记录,该记录代表了我在这个时刻的物品对象的镜像?每次我更新这个objetct Item时,我都需要我的存储库(更新)的方法来生成另一个插入Item__History的插入,创建另一个反映Item的确切时刻的对象。
稍后,我可以去Item__History并查看此课程项目已有的所有州。
我可以通过为Item__History创建一个模型(好的,创建它)并为Item__History创建一个存储库类,并在存储库类中插入/更新Item期间,创建一个Item__History的实例。 ,将所有值复制到此新实例中,并调用Item__Repository将其插入。我不确定它是否是最好的方法,因为我会有很多课程,我想管理历史,并且不想有很多&# 34; XXX ___历史&#34;类和存储库。
对不起,顺便问一下这个问题是不是很好。我希望有人理解。
答案 0 :(得分:3)
如果您使用GenericHistoryRepository
界面创建IGenericHistoryRepository
课程并实施方法Add()
,AddList()
,Update()
和Remove()
,该怎么办?这样的通用类,您将能够利用其各种实体。您可以遵循此代码。
namespace DataAccessLayer.DataAccessObject
{
public interface IGenericHistoryRepository<T> where T : class
{
void Add(params T[] items);
void AddList(params T[] items);
void Update(params T[] items);
void Remove(params T[] items);
}
public class GenericHistoryRepository<T> : IGenericHistoryRepository<T> where T : class
{
public virtual void Add(params T[] items)
{
using (var context = new MainContext())
{
foreach (T item in items)
{
context.Entry(item).State = EntityState.Added;
}
context.SaveChanges();
}
}
public void AddList(params T[] items)
{
using (var context = new MainContext())
{
foreach (T item in items)
{
context.Entry(item).State = EntityState.Added;
}
context.SaveChanges();
}
}
public virtual void Update(params T[] items)
{
using (var context = new MainContext())
{
foreach (T item in items)
{
context.Entry(item).State = EntityState.Modified;
}
context.SaveChanges();
}
}
public virtual void Remove(params T[] items)
{
using (var context = new MainContext())
{
foreach (T item in items)
{
context.Entry(item).State = EntityState.Deleted;
}
context.SaveChanges();
}
}
}
}
用法
public override void Insert(Item entity)
{
base.Insert(entity);
new GenericHistoryRepository<Item_History>().Add(entity);
}
...
new GenericHistoryRepository<XXX_History>().Add(entity);