gpt4 book ai didi

c# - 持久化时自动创建对象历史记录

转载 作者:行者123 更新时间:2023-11-30 21:44:00 26 4
gpt4 key购买 nike

我正在寻找一种方法来在每次将我拥有的类保存到数据库时自动生成记录,而无需触发器或数据库函数。

我的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 存储库类有一个插入来保存它。就这样

 /// <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 中,创建另一个对象来反射(reflect) Item 的这个确切时刻。

稍后,我可以去 Item__History 并检查这个类 Item 已经拥有的所有状态。

我可以通过为 Item__History 创建一个模型(好的,它已创建)并为 Item__History 创建一个存储库类,在存储库类中插入/更新 Item 期间,我创建一个 Item__History 的实例,复制所有值到这个新实例中并调用 Item__Repository 将其插入到。我不确定这是否是最好的方法,因为我将有很多我想要管理历史的类,并且不想有很多“XXX___History”类和存储库。

抱歉,顺便说一句,如果问题不够好。我希望有人能理解它。

最佳答案

如果您使用IGenericHistoryRepository 接口(interface)创建GenericHistoryRepository 类并实现方法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);

关于c# - 持久化时自动创建对象历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com