[英]How to add new row to table, using existing row data in EF6?
使用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;
}
}
因此,據您所見,我期望以下行為:
如果我的User類實現了IChangable接口(當然是這樣),那么我想保留表中的現有用戶行,而不進行任何更改,但是,順便說一句,我希望我的上下文在表中添加具有新ID和新LastName的行 。 但這是行不通的。 現有行還具有LastName的新值。 有什么建議嗎?
您需要創建用戶的副本,然后將其保存到數據庫中。 問題在於EF不使用ID來引用記錄,而是實例化了一個表示數據庫中記錄的對象。 在這里,您可以閱讀有關ORM的更多信息,它肯定比我解釋得更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.