Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不维护数据库上下文的情况下检索和修改实体?_C#_Wpf_Entity Framework - Fatal编程技术网

C# 在不维护数据库上下文的情况下检索和修改实体?

C# 在不维护数据库上下文的情况下检索和修改实体?,c#,wpf,entity-framework,C#,Wpf,Entity Framework,我不熟悉实体框架。我正在使用WPF应用程序中的数据库。我已经创建了一个模型,如中所示,现在我想在我的应用程序中使用它 我知道如何检索和修改如下实体: DatabaseContext ct = new DatabaseContext(); var person = ct.Persons.Find(1); person.Name = "NewName"; ct.SaveChanges(); class PersonViewModel { Person psn; public P

我不熟悉实体框架。我正在使用WPF应用程序中的数据库。我已经创建了一个模型,如中所示,现在我想在我的应用程序中使用它

我知道如何检索和修改如下实体:

DatabaseContext ct = new DatabaseContext();
var person = ct.Persons.Find(1);
person.Name = "NewName";
ct.SaveChanges();
class PersonViewModel {

    Person psn;

    public PersonViewModel(int PersonId) {
         DatabaseContext ct = new DatabaseContext();
         psn = ct.Persons.Find(1);
    }

    public Save() {
        DatabaseContect ct = new DatabaseContext();
        ct.Persons.Update(psn); // (There is no Update() method.)
        ct.SaveChanges();
    }

}
public partial class DatabaseContext: DbContext
{
    public DbSet<Person> Persons { get; set; }
}
但是,在等待用户输入的应用程序中,这意味着在ViewModel中保留datacontext,这不是很理想。相反,我想做这样的事情:

DatabaseContext ct = new DatabaseContext();
var person = ct.Persons.Find(1);
person.Name = "NewName";
ct.SaveChanges();
class PersonViewModel {

    Person psn;

    public PersonViewModel(int PersonId) {
         DatabaseContext ct = new DatabaseContext();
         psn = ct.Persons.Find(1);
    }

    public Save() {
        DatabaseContect ct = new DatabaseContext();
        ct.Persons.Update(psn); // (There is no Update() method.)
        ct.SaveChanges();
    }

}
public partial class DatabaseContext: DbContext
{
    public DbSet<Person> Persons { get; set; }
}
我不知道怎么做
Update()

我对DatabaseContext的定义如下:

DatabaseContext ct = new DatabaseContext();
var person = ct.Persons.Find(1);
person.Name = "NewName";
ct.SaveChanges();
class PersonViewModel {

    Person psn;

    public PersonViewModel(int PersonId) {
         DatabaseContext ct = new DatabaseContext();
         psn = ct.Persons.Find(1);
    }

    public Save() {
        DatabaseContect ct = new DatabaseContext();
        ct.Persons.Update(psn); // (There is no Update() method.)
        ct.SaveChanges();
    }

}
public partial class DatabaseContext: DbContext
{
    public DbSet<Person> Persons { get; set; }
}
public分部类DatabaseContext:DbContext
{
公共DbSet Persons{get;set;}
}
但我似乎没有一些人在解决类似问题时使用的
DatabaseContext.ObjectStateManager
。我不知道这是为什么-这与使用POCO对象有关吗


我应该如何解决这个问题?

您需要使用
Attach()
方法。您可以在此处找到更多详细信息:


事情可能会变得更复杂,因为附加的对象将处于未更改状态,您需要将其更新为已修改。

您需要使用
Attach()
方法。您可以在此处找到更多详细信息:

事情可能会变得更复杂,因为附加对象将处于未更改状态,您需要将其更新为“已修改”。

您可以使用

您可以使用


作为附加的备选方案:

public Save() {
    DatabaseContect ct = new DatabaseContext();
    ct.Entry(psn).State = EntityState.Modified;
    ct.SaveChanges();
}

作为附加的备选方案:

public Save() {
    DatabaseContect ct = new DatabaseContext();
    ct.Entry(psn).State = EntityState.Modified;
    ct.SaveChanges();
}

谢谢,这个很好用。我看过一些文章建议使用
Attach()
,但是我找不到一个用这个方法更改
实体状态的好方法。谢谢,这个方法非常有效。我看过一些文章建议使用
Attach()
,但是我找不到一个好方法用这个方法来更改
实体状态。