我可能会离开这里,这个问题可能与主观接近,但是无论如何这里有。列表到数据库
目前我用IList<T>
从内存中的数据库中缓存信息,所以我可以使用LINQ
来查询他们的信息。我有一个ORM'ish层,我已经在SO的一些问题的帮助下编写,以便从数据库中轻松查询我需要的信息。例如:
IList<Customer> customers = DB.GetDataTable("Select * FROM Customers").ToList<Customer>();
它一直工作正常。我也有扩展方法来对这些列表中的单个项目执行CRUD更新:
DB.Update<Customer>(customers(0));
再次运行得非常好。
现在在我的应用程序的GUI层,特别是当绑定DataGridView
的用户编辑数据时,我发现自己绕过这个DAL层,并直接使用TableAdapters
内的形式打破分层架构的气味有点给我。我还发现,我在这里使用的是TableAdapters
和ILists
,在我的代码中存在不同的标准,我希望将它们合并为一个。
理想情况下,我希望能够绑定到这些列表,然后让DAL为我更新列表的“脏”数据。对我来说,这个过程将涉及以下内容:
- 遍历列表中的任何“脏”项目
- 对于这些,看看是否存在与在DB
- 如果PK的项目(2),然后更新,否则插入
- 最后,执行
Delete FROM * WHERE ID NOT IN('all ids in list')
查询
我不能完全肯定这是如何在TableAdapter
处理,但我可以看到这个方法的性能下降显随着清单上的项目越来越多,这种情况非常迅速而且很快。
所以我的问题是这样的:
是否存在的承诺清单数据库更简单的方法?请注意单词commit,因为它可能是插入/更新或删除。
我是否应该转换为DataTable
?例如here
我确定一些更高级的ORM会执行这种类型的事情,但是有没有可以为我做这个的迷你ORM(例如dapper/Petapoco/Simple.data等)?我想保持简单(就像我现在的DAL一样)和灵活的(如果它能完全满足我的需求,我不介意编写SQL)。
有没有令人信服的理由,您没有使用功能丰富的ORM?你在做什么听起来很不方便。 –
是的,我开始认为这可能是最好的 – Simon
从零开始构建自定义的ORM非常诱人并且容易陷入。您现在处于转折点,最好停止开发您的自定义ORM,并且如果可以,请使用真正的ORM。现代ORM已经很好地解决了许多复杂的问题,重新发明轮子不可能符合客户的最佳利益。 –