gpt4 book ai didi

c# - 当第一个项目存在实体验证错误时,保存项目列表时出错

转载 作者:行者123 更新时间:2023-11-29 22:55:29 25 4
gpt4 key购买 nike

我有一个通用业务类,用于通过 mysql 5.6 和 Entity Framework 6 操作数据。我创建了一个从表导入数据并创建对象列表的方法,以便我可以调用业务类并保存或者更新目标数据库中的记录。

//part of import method
using (var business = new Business<Customer>(context))
{
foreach (var sourceCustomer in sourceCustomersList)
{
var customer = business.GetData().ToList().Find(x=>x.OriginalId == sourceCustomer.Id) ?? new Customer();

customer.Name = sourceCustomer.Name; // for example, this property is required
customer.Fone = sourceCustomer.Fone;
customer.City = sourceCustomer.City;
customer.State = sourceCustomer.State);
customer.Active = sourceCustomer.Active;

if (customer.Id > 0)
{
business.Update(Customer);
}
else
{
customer.SourceId = sourceCustomer.Id;
business.Insert(fornecedor);
}
}
}


public class Business<T> : IBusiness<T>, IDisposable
{
protected ESistemContext Context;

public Business(ESistemContext context)
{
Context = context;
}

public virtual bool Insert(T entity)
{
try
{
Context.Entry(entity).State = EntityState.Added;
Context.SaveChanges();
return true;
}
catch (Exception exception)
{
return false;
}
}



public virtual bool Update(T entity)
{
try
{
Context.Entry(entity).State = EntityState.Modified;
Context.SaveChanges();
return true;
}
catch (Exception exception)
{
return false;
}
}


public void Dispose()
{
if (Context == null)
return;
Context.Dispose();
Context = null;
}
}

我的问题是:当我在某个项目上出现验证错误(Name 属性为空值)时,我尝试处理的所有其他项目在调用时都会出现相同的验证错误(即使它们的 Name 属性已正确填充) context.SaveChanges() 业务类调用异常并显示相同的验证错误。

最佳答案

经过一番查找,终于找到了问题的解决办法。在 catch block 中添加了以下代码行,上下文现在将条目释放为新值,然后进行新的验证。

Context.Entry(entity).State = EntityState.Detached;

关于c# - 当第一个项目存在实体验证错误时,保存项目列表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732889/

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