如何使用 EF6 中的现有行数据向 table 添加新行?
How to add new row to table, using existing row data in EF6?
使用 EF6。
我正在我的上下文实例上调用一个方法:
var usr = context.Get<User>("Doe");
正如我在调试模式下所见,我的 usr 变量将 link 存储到 User class 实例。根据数据库行 ID,此实例有自己的 ID。
现在我想为我的用户更改姓氏:
usr.LastName="Anderson";
然后我尝试调用在我的上下文中声明的以下方法 class:
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;
}
}
因此,就您所见,我期待以下行为:
如果我的用户 class 实现了 IChangable 接口(当然它实现了),我想在 table 中保留现有用户行而不做任何更改,但顺便说一句,我希望我的上下文使用新的 ID 和新的 LastName 在 table 中添加一行。但它不起作用。现有行也有新值 LastName。
有什么建议吗?
您需要创建用户的副本,然后将其保存到数据库中。问题是 EF 不使用 ID 来引用记录,而是使用实例化的对象来表示数据库中的记录。 Here 你可以阅读更多关于 ORM 的内容,这肯定比我解释得更好。
使用 EF6。 我正在我的上下文实例上调用一个方法:
var usr = context.Get<User>("Doe");
正如我在调试模式下所见,我的 usr 变量将 link 存储到 User class 实例。根据数据库行 ID,此实例有自己的 ID。
现在我想为我的用户更改姓氏:
usr.LastName="Anderson";
然后我尝试调用在我的上下文中声明的以下方法 class:
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;
}
}
因此,就您所见,我期待以下行为:
如果我的用户 class 实现了 IChangable 接口(当然它实现了),我想在 table 中保留现有用户行而不做任何更改,但顺便说一句,我希望我的上下文使用新的 ID 和新的 LastName 在 table 中添加一行。但它不起作用。现有行也有新值 LastName。 有什么建议吗?
您需要创建用户的副本,然后将其保存到数据库中。问题是 EF 不使用 ID 来引用记录,而是使用实例化的对象来表示数据库中的记录。 Here 你可以阅读更多关于 ORM 的内容,这肯定比我解释得更好。