我正在尝试使用EF实现项目版本控制,我需要知道的是我实际调用的Update()
实体是否实际上已更改,因此我可以增加其版本号。我如何获得这些信息?
我的存储库Update
函数如下所示:
public virtual void Update(T entity)
{
dbset.Attach(entity);
dataContext.Entry(entity).State = EntityState.Modified;
}
答案 0 :(得分:0)
您可以从实体状态获取信息。
如果某个属性已被更改,则状态将为"已修改"否则"未改变"。
using (var ctx = new TestContext())
{
var first = ctx.Entity_Basics.First();
var x1 = ctx.IsModified(first); // false
first.ColumnInt = 9999;
var x2 = ctx.IsModified(first); // true
}
public static class Extensions
{
public static bool IsModified <T>(this DbContext context, T entity) where T : class
{
return context.Entry(entity).State == EntityState.Modified;
}
}
答案 1 :(得分:0)
我之前选择的是比较2的序列化版本:
public void UpdateProduct(Product product)
{
var productInDb = GetByID(product.Id);
if (!JToken.DeepEquals(JsonConvert.SerializeObject(product), JsonConvert.SerializeObject(productInDb)))
product.CurrentVersion++;
product = Update(product);
}