如何有效地持久化存储大量需要被修改和搜索的对象?

10 浏览
0 Comments

如何有效地持久化存储大量需要被修改和搜索的对象?

我正在用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中设置本地数据库一样。

也许我已经把自己搞糊涂了,思考的方向可能有误,如果是这样,请告诉我。谢谢你的帮助。

0
0 Comments

大量对象的存储、修改和搜索是一个常见的问题。为了解决这个问题,可以使用实体框架(Entity Framework)作为一种解决方案。实体框架是一种适用于Windows应用程序的完整功能的持久化层。它提供了一个简单的方式来映射和操作数据库中的对象。

在安装实体框架之前,需要在项目中引入NuGet包。可以通过右键点击项目,选择"Manage NuGet Packages...",然后在搜索栏中输入"Entity Framework"来安装它。

安装完实体框架后,可以创建一个继承自DbContext的类,该类用于管理数据库上下文和对象集合。在类中定义了DbSet属性来表示对象集合,T是对象的类型。例如,可以定义一个ApplicationDbContext类,并在其中定义了Accounts和Clients两个DbSet属性来表示Account和Client对象的集合。

接下来,可以定义实体类,如Client和Account。这些类可以包含属性,用于表示对象的各个字段。例如,Client类可以包含Id、FirstName、LastName等属性,Account类可以包含Id、Client、Type等属性。

通过创建这些实体类和ApplicationDbContext类,可以使用实体框架来管理和操作大量对象。可以使用LINQ查询语句来搜索和过滤对象,也可以使用实体框架提供的方法来修改和持久化对象。

总结起来,使用实体框架是一种解决大量对象存储、修改和搜索的有效方法。它提供了一个简单的方式来映射数据库中的对象,并提供了强大的查询和操作功能。使用实体框架可以提高开发效率,减少代码量,并提供更好的可维护性和扩展性。

0
0 Comments

在处理大量的对象时,数据库是一个不错的存储选择。但更好的选择是考虑使用数据访问层。如果使用数据访问层并将与数据相关的代码放在该层中,那么如果更改数据存储的技术,应用程序将不会改变,所有的更改将在数据访问层中进行。你可以简单地实现一个与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选择类别,这将会很麻烦。

不客气:)是的,这是可行的,也不是一个坏的方法,但你应该考虑以下几点:-在网格中显示共享的字段子集。-如果你有一个工具栏,应该根据所选行类型显示合适的按钮。-此外,在网格中显示数据时,你可能会发现这个帖子很有帮助。

0
0 Comments

出现原因:需要存储大量对象,并对这些对象进行修改和搜索,需要一种持久性的解决方案。

解决方法:使用Sqlite作为桌面应用程序中的数据库选项。整个数据库是硬盘上的一个单一文件,数据库引擎在应用程序内运行,因此您无需安装任何软件即可运行。在这个问题中,您可以找到可用的.net库来使用Sqlite。

Sqlite 是桌面应用程序中的一个好选择数据库。整个数据库是硬盘上的一个单一文件,数据库引擎在应用程序内运行,因此您无需安装任何软件即可运行。
在 这个问题 中,您可以找到可用的.net库来使用Sqlite。

0