C# - 在 Windows 应用程序中使用数据库时的最佳实践是什么?
C# - What are the best practices when working with DBs in Windows Applications?
我主要使用 C# 编写 Windows 应用程序。我发现当我需要使用数据源、Table 适配器等实现数据库时,我的代码变得非常不整洁。我还发现,当我需要对数据进行非常具体的处理时,无论如何我都需要为表格写 类 (而且我通常使用 Dapper)。另一件事是,如果我希望我的应用程序能够使用多个数据库提供程序,使用 Table 适配器等连接到另一个提供程序是一个非常乏味的过程。最后一件事是,我不就像简单地单击数据导航器上的 +(添加)按钮,一切都在“幕后”处理,并拥有一组本地数据,这些数据仅在单击“保存”按钮(EndEdit( ), 等等).
我喜欢能够单击一个按钮,然后创建、读取、更新、删除当前表单上的任何内容,而无需触发大量事件。 (我什至不知道有一半时间会发生这种情况。)
只使用普通查询和 DbConnection 是个好主意吗?举个简单的例子:
void OnLoad(object sender, EventArgs e){
string query = "SELECT * FROM Foo";
BindingList<Foo> FooCollection = this.dbInstance.QueryMany<Foo>(query);
dataGridView.BindingSource = FooCollection;
}
然后添加一行就像:
void OnAddClick(object sender, EventArgs e){
Foo foo = new Foo();
foo.UserName = "John Snow"
bool success = this.dbInstance.Create(foo);
if(success)
FooCollection.Add(foo);
}
这是半正经的做法吗?使用这种方法我会 运行 陷入许多错误或问题吗?在编写 Windows 表单应用程序时,您会推荐什么或如何使用数据库?非常感谢您的建议。
真的不知道为什么我的问题被关闭了。看到第一个答案非常有用,让我对使用数据库有了更好的了解。
这取决于您的需求,但基本上这是一个性能问题以及您的项目有多大。
ORM 设计用于在幕后执行操作,以自动执行将数据对象映射到您的代码的过程,并能够从您的编程语言访问数据对象。
如果您的应用程序主要关注性能,您可以选择使用 ADO.NET、ODBC 或 OLEDB 连接。
但是查询最好以一种您不必更改代码就能更改它们的方式来表达。
context.Database.SqlQuery<YourEntityType>("storedProcedure")
This is a really good reference for this question
Words of Wisdom:
Dapper just does mapping but you need to code a lot , EF does much more on the top of it and not just mapping. So EF will be slow.
I can also say that pure ADO.NET is faster than Dapper , OLEDB is faster than ADO.NET and ODBC can be faster than OLEDB.
So if I am serious about performance I would probably avoid any ORM.
我主要使用 C# 编写 Windows 应用程序。我发现当我需要使用数据源、Table 适配器等实现数据库时,我的代码变得非常不整洁。我还发现,当我需要对数据进行非常具体的处理时,无论如何我都需要为表格写 类 (而且我通常使用 Dapper)。另一件事是,如果我希望我的应用程序能够使用多个数据库提供程序,使用 Table 适配器等连接到另一个提供程序是一个非常乏味的过程。最后一件事是,我不就像简单地单击数据导航器上的 +(添加)按钮,一切都在“幕后”处理,并拥有一组本地数据,这些数据仅在单击“保存”按钮(EndEdit( ), 等等).
我喜欢能够单击一个按钮,然后创建、读取、更新、删除当前表单上的任何内容,而无需触发大量事件。 (我什至不知道有一半时间会发生这种情况。)
只使用普通查询和 DbConnection 是个好主意吗?举个简单的例子:
void OnLoad(object sender, EventArgs e){
string query = "SELECT * FROM Foo";
BindingList<Foo> FooCollection = this.dbInstance.QueryMany<Foo>(query);
dataGridView.BindingSource = FooCollection;
}
然后添加一行就像:
void OnAddClick(object sender, EventArgs e){
Foo foo = new Foo();
foo.UserName = "John Snow"
bool success = this.dbInstance.Create(foo);
if(success)
FooCollection.Add(foo);
}
这是半正经的做法吗?使用这种方法我会 运行 陷入许多错误或问题吗?在编写 Windows 表单应用程序时,您会推荐什么或如何使用数据库?非常感谢您的建议。
真的不知道为什么我的问题被关闭了。看到第一个答案非常有用,让我对使用数据库有了更好的了解。
这取决于您的需求,但基本上这是一个性能问题以及您的项目有多大。
ORM 设计用于在幕后执行操作,以自动执行将数据对象映射到您的代码的过程,并能够从您的编程语言访问数据对象。
如果您的应用程序主要关注性能,您可以选择使用 ADO.NET、ODBC 或 OLEDB 连接。
但是查询最好以一种您不必更改代码就能更改它们的方式来表达。
context.Database.SqlQuery<YourEntityType>("storedProcedure")
This is a really good reference for this question
Words of Wisdom: Dapper just does mapping but you need to code a lot , EF does much more on the top of it and not just mapping. So EF will be slow. I can also say that pure ADO.NET is faster than Dapper , OLEDB is faster than ADO.NET and ODBC can be faster than OLEDB. So if I am serious about performance I would probably avoid any ORM.