如何使用 EF6 中的现有行数据向表添加新行
本文关键字:数据 添加 新行 EF6 何使用 | 更新日期: 2023-09-27 18:31:57
使用 EF6.我正在我的上下文实例上调用一个方法:
var usr = context.Get<User>("Doe");
正如我在调试模式下看到的那样,我的 usr 变量存储了一个指向 User 类实例的链接。根据数据库行 ID,此实例具有自己的 ID。
现在我想更改用户的姓氏:
usr.LastName="Anderson";
之后,我尝试调用以下方法,该方法在我的上下文类中声明:
public TEntity InsertOrUpdate<TEntity>(TEntity entityInstance) where TEntity : BaseEntity
{
if (entityInstance is IChangable)
{
this.Entry<TEntity>((TEntity)entityInstance).State = EntityState.Added;
this.SaveChanges();
return (TEntity)newInstance;
}
else
{
if (entityInstance.ID == default(int))
{
this.Set<TEntity>().Add(entityInstance);
}
else
{
this.Entry<TEntity>(entityInstance).State = EntityState.Modified;
}
this.SaveChanges();
return entityInstance;
}
}
因此,据您所知,我预计会出现以下行为:
如果我的用户类实现了 IChangable 接口(当然是这样),我想将现有用户行保留在表中而不进行任何更改,但顺便说一下,我希望我的上下文使用新 ID 和新 LastName 在表中添加一行。但它不起作用。现有行还具有"姓氏"的新值。有什么建议吗?
您需要创建用户的副本,然后将其保存到数据库中。问题在于 EF 不使用 ID 来引用记录,而是使用实例化的对象来引用数据库中的记录。在这里你可以阅读更多关于ORM的信息,它肯定比我解释得更好。