如何有效地持久化存储大量需要被修改和搜索的对象?
如何有效地持久化存储大量需要被修改和搜索的对象?
我正在用C#编写一些银行软件,以便学习。我有不同的类,如
class Client { int userID; string firstName; string lastName; string description; DateTime birthdate; string type; .... } class Account { int accountID; int userID; string type; DateTime runtime; DateTime opened; string description; .... }
现在我想在图形界面(WinForms)中显示所有不同的数据,我认为DataGridView
是正确的选择,并构建表单,以便用户可以添加新的客户和账户,以及修改或删除它们。
我的问题是,我不确定应该如何保存我的对象及其数据,以便在退出并重新启动程序后仍然可用,而不会失去使用对象方法来处理数据的能力(例如使用setter方法修改数据)。如果能够轻松地发送我的应用程序给他人进行代码审查,而不需要设置大量的东西,那将是很好的。有点像在Visual Studio中设置本地数据库一样。
也许我已经把自己搞糊涂了,思考的方向可能有误,如果是这样,请告诉我。谢谢你的帮助。
大量对象的存储、修改和搜索是一个常见的问题。为了解决这个问题,可以使用实体框架(Entity Framework)作为一种解决方案。实体框架是一种适用于Windows应用程序的完整功能的持久化层。它提供了一个简单的方式来映射和操作数据库中的对象。
在安装实体框架之前,需要在项目中引入NuGet包。可以通过右键点击项目,选择"Manage NuGet Packages...",然后在搜索栏中输入"Entity Framework"来安装它。
安装完实体框架后,可以创建一个继承自DbContext的类,该类用于管理数据库上下文和对象集合。在类中定义了DbSet
接下来,可以定义实体类,如Client和Account。这些类可以包含属性,用于表示对象的各个字段。例如,Client类可以包含Id、FirstName、LastName等属性,Account类可以包含Id、Client、Type等属性。
通过创建这些实体类和ApplicationDbContext类,可以使用实体框架来管理和操作大量对象。可以使用LINQ查询语句来搜索和过滤对象,也可以使用实体框架提供的方法来修改和持久化对象。
总结起来,使用实体框架是一种解决大量对象存储、修改和搜索的有效方法。它提供了一个简单的方式来映射数据库中的对象,并提供了强大的查询和操作功能。使用实体框架可以提高开发效率,减少代码量,并提供更好的可维护性和扩展性。
在处理大量的对象时,数据库是一个不错的存储选择。但更好的选择是考虑使用数据访问层。如果使用数据访问层并将与数据相关的代码放在该层中,那么如果更改数据存储的技术,应用程序将不会改变,所有的更改将在数据访问层中进行。你可以简单地实现一个与SQL Server、Oracle、Sqlite甚至Xml文件配合工作的数据访问层。但是你的应用程序不会依赖于具体的实现。
实现数据访问层时,一个很好的选择是使用SQL Express或SQL Local DB,并使用Entity Framework将对象映射到数据库表并执行CRUD操作。你会发现“仓储”、“工作单元”和“依赖注入”这些概念非常有用。
你应该使用接口来进行数据访问,并提供一个使用EF等实现的实现,然后将该实现注入到你的应用程序中。
关于Entity Framework有很多好资源。例如,你可以查看“Implementing the Repository and Unit of Work Patterns”,这个实现是针对ASP.Net的,但在Windows Form中也完全适用。
还有一个很好的资源是“Entity Framework Databinding with WinForms”。
此外,还可以查看“Entity Framework (EF) Documentation”页面,你会发现页面上的主题非常有用。
还有一个教我如何使用EF的仓储模式的视频,非常棒!
当然,还有ASP.NET网站上关于使用EF实现仓储和工作单元模式的文章,也值得一读。
你太棒了!对于在DataGridView中显示两种具有相同基类的对象(在我的情况下是Staff.cs和Client.cs,它们都派生自抽象类User.cs),这是否可行?我不知道这是否是一个好的方法,但对我来说,如果你必须在两个DataGridView之间切换或者通过ComboBox选择类别,这将会很麻烦。
不客气:)是的,这是可行的,也不是一个坏的方法,但你应该考虑以下几点:-在网格中显示共享的字段子集。-如果你有一个工具栏,应该根据所选行类型显示合适的按钮。-此外,在网格中显示数据时,你可能会发现这个帖子很有帮助。