C# 在不维护数据库上下文的情况下检索和修改实体?
我不熟悉实体框架。我正在使用WPF应用程序中的数据库。我已经创建了一个模型,如中所示,现在我想在我的应用程序中使用它 我知道如何检索和修改如下实体: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
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()
,但是我找不到一个好方法用这个方法来更改实体状态。