Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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#_Database_Orm_Data Access Layer - Fatal编程技术网

C# 列表到数据库

C# 列表到数据库,c#,database,orm,data-access-layer,C#,Database,Orm,Data Access Layer,我可能离这里太远了,这个问题可能有点主观,但不管怎样,还是这样 目前,我使用IList将数据库中的信息缓存在内存中,这样我就可以使用LINQ从数据库中查询信息。我有一个ORM'ish层,我已经在这里写了一些问题的帮助下,以便轻松地从数据库查询我需要的信息。例如: IList<Customer> customers = DB.GetDataTable("Select * FROM Customers").ToList<Customer>(); IList customer

我可能离这里太远了,这个问题可能有点主观,但不管怎样,还是这样

目前,我使用
IList
将数据库中的信息缓存在内存中,这样我就可以使用
LINQ
从数据库中查询信息。我有一个ORM'ish层,我已经在这里写了一些问题的帮助下,以便轻松地从数据库查询我需要的信息。例如:

IList<Customer> customers = DB.GetDataTable("Select * FROM Customers").ToList<Customer>();
IList customers=DB.GetDataTable(“从客户中选择*).ToList();
它一直运作良好。我还有扩展方法可以对这些列表中的单个项目进行CRUD更新:

DB.Update<Customer>(customers(0));
DB.Update(客户(0));
再次工作得很好

现在在我的应用程序的GUI层中,特别是在绑定用户编辑数据的
DataGridView
时,我发现自己绕过了这个DAL层,直接在表单中使用
TableAdapters
,这打破了我觉得有点奇怪的分层架构。我还发现,我在这里使用
TableAdapters
,在那里使用
ILists
,在我的代码中有不同的标准,我想将它们合并为一个标准

理想情况下,我希望能够绑定到这些列表,然后让DAL为我更新列表的“脏”数据。对我来说,这一过程将涉及以下方面:

  • 遍历任何“脏”项的列表
  • 对于其中的每一项,请查看数据库中是否已经存在具有PK的项
  • 如果是(2),则更新,否则插入
  • 最后,执行
    Delete FROM*WHERE ID NOT IN('all ID IN list')
    查询
  • 我不完全确定在
    TableAdapter
    中如何处理这个问题,但我可以看到,随着列表中项目的增加,这个方法的性能显著下降,而且下降得相当快

    所以我的问题是:

    是否有更简单的方法将列表提交到数据库?请注意“提交”一词,因为它可能是插入/更新或删除

    我是否应该转换为
    DataTable
    ?e、 g

    我相信一些更高级的ORM会执行这种类型的操作,但是有没有小型ORM(例如dapper/Petapoco/Simple.data等)可以为我执行这种操作?我希望保持它的简单性(就像我当前的DAL一样)和灵活性(如果它能满足我的需要,我不介意编写SQL)

    目前,我使用IList将数据库中的信息缓存在内存中,以便使用LINQ从中查询信息

    Linq还有一个部门叫Linq to Datasets,所以这不是一个令人信服的理由

    最好决定你真正想要/需要什么:

    • 一个完整的类ORM实体框架
    • 将数据集与数据适配器一起使用
    • 使用基本ADO.NET(DataReader和List)并实现您自己的更改跟踪

    你可以在一定程度上混合它们,但正如你所指出的,最好选择一种

    谢谢亨克,我没有意识到我可以绕过整个缓存列表。所以我想我可以使用数据集来存储缓存的信息,但仍然可以映射到POCO,以便在需要时检索信息。。。也许ORM是最好的这里有一个令人信服的原因,你不使用功能丰富的ORM吗?你所做的听起来有点离经叛道。是的,我开始认为,从头开始建立一个定制ORM可能是最好的选择,这很有诱惑力,也很容易陷入其中。您现在正处于转折点,如果可以的话,最好停止开发您的定制ORM,使用真正的ORM。现代的ORM已经很好地解决了很多复杂的问题,重新设计这个轮子不太可能符合客户的最佳利益。