Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 从UI持久化数据_C#_.net_Winforms_Entity Framework_Repository - Fatal编程技术网

C# 从UI持久化数据

C# 从UI持久化数据,c#,.net,winforms,entity-framework,repository,C#,.net,Winforms,Entity Framework,Repository,我正在用EF4做一个小测试。我构建了一个简单的数据库,其中包含一个表: 表:人 列:Id 列:名称 我有一个windows窗体应用程序,其中包含一个带有gridview的窗体 我已经对Model.edmx进行了所有设置,并且工作正常(在不封装上下文的情况下进行了测试) 现在,我已经将上下文封装到一个通用存储库(repository)中。我正在学习如何使用存储库,然后我将在UnitoOfWork上工作。 我的存储库实现了CRUD 我的存储库有一个返回所有实体的方法(public List G

我正在用EF4做一个小测试。我构建了一个简单的数据库,其中包含一个表: 表:人 列:Id 列:名称

  • 我有一个windows窗体应用程序,其中包含一个带有gridview的窗体
  • 我已经对Model.edmx进行了所有设置,并且工作正常(在不封装上下文的情况下进行了测试)
  • 现在,我已经将上下文封装到一个通用存储库(repository)中。我正在学习如何使用存储库,然后我将在UnitoOfWork上工作。
    • 我的存储库实现了CRUD
  • 我的存储库有一个返回所有实体的方法(public List GetAll())
  • 该列表在我的windows窗体中分配给我的bindingsource。这很有效,很好
我的问题是: 我对如何将数据从UI保存回数据存储有点困惑

  • 我是否必须在表单上设置一些方法来检查更改/删除的数据
  • 如何将其发送回存储库?我必须将其附加到上下文吗

我希望有人能给我一些指导。提前感谢大家!如果您有任何问题,请告诉我。

需要在表单上触发事件,无论是按钮单击事件还是其他UI事件。在Windows窗体中,如果双击设计器中的按钮,它将为您创建事件处理程序

在事件处理程序中,您需要利用另一个类,或者直接使用EF上下文。由于您正在使用存储库,因此可以利用设计器文件中的存储库类,尽管我建议您通过服务层应用任何业务逻辑(即UI调用服务层,服务层在内部使用存储库)

这使代码保持独立,并且更易于维护/重用

但是,要将数据持久化到数据存储,它可能看起来像这样

public void SetPersonName(int personID, string personName)
{
     var context = new PersonContext(myConnectionString);
     var person = context.Persons.Where(x => x.PersonID == personID).FirstOrDefault();

     if(person == null)
     {
          throw new InvalidOperationException("Boo Hoo, person ID is invalid");
     }

     person.Name = personName;
     context.SaveChanges();
}

我使用的解决方案,我希望是正确的。。。我正在使用bindingsource的listchanged事件通知repo到CRUD。