如何使用EF6中的现有行数据向表中添加新行?

时间:2016-01-26 08:00:04

标签: c# .net entity-framework crud

使用EF6。 我正在我的上下文实例上调用一个方法:

usr.LastName="Anderson";

正如我在调试模式中看到的那样,我的 usr 变量存储了一个指向User类实例的链接。根据数据库行ID,此实例具有自己的ID。

现在我想为我的用户更改LastName:

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;
            }

        }

然后我尝试调用以下方法,该方法在我的上下文类中声明:

function foo(g) {
    // If the initial g does not defined, null or 0
    if(!g) {
      // Define g as an empty object
      g = {}
    }
}

所以,就你所知,我期待以下行为:

如果我的User类实现了IChangable接口(当然是它),我想在表中保留现有用户行而不做任何更改,但顺便说一下,我希望我的上下文用新的 ID 和新的 LastName 。但它不起作用。现有行还具有 LastName 的新值。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您需要创建用户的副本,然后将其保存到数据库中。问题是EF不使用ID来引用记录,而是实例化了一个对象来记录数据库中的记录。 Here你可以阅读更多关于ORM的信息,这肯定比我更好解释。