簡體   English   中英

如何使用EF6中的現有行數據向表中添加新行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM