使用C#.Net访问SQL Server数据库的最佳方法

我是.NET的新手,并且已经了解了几种不同的查询SQL Server数据库的方法,例如ADO.NET和entity framework。

任何人都可以给我一些关于新应用程序的最佳方法的建议吗?

感谢您的任何帮助或建议。

下面是使用EF从数据库生成代码的示例(对于您可能希望从代码生成数据库的真实应用程序):

  1. 右键单击您的项目>>添加>>新项>> ADO.NET实体数据模型。
  2. 为您的实体选择一个名称,即MyEntities.edmx,单击“下一步”
  3. 选择“从数据库生成”
  4. 如果还没有“新连接”,请配置它。 下一个。
  5. 选择要包含在实体中的表,视图和SPROC。 完。

您将看到一个文件MyEntities.edmx已添加到您的项目中。 您可以在设计视图中打开它以查看实体和关系的图表。 请注意,每个实体都应该有一个主键 – 最简单的方法是向每个表或GUID列添加ID – 自动增量字段。 无论如何,你现在可以像这样查询你的数据库:

// assuming a "Product" table, which has an entity pluralized to "Products" MyEntities db = new MyEntities(); var cheapProducts = db.Products.Where(p => p.Price > 30); // var is IEnumerable 

entity framework是最简单的,它内置。

您所要做的就是重要您的模型,然后只需更新自动映射到数据库的简单类。

它就像更新普通对象一样,但最后你会调用SaveChanges。

LINQ to SQL很容易使用。 您可以将数据库表拖放到设计器中,并在几分钟内编写非常简单的查询。

  NorthwindDataContext db = new NorthwindDataContext(); var products = from p in db.Products select p; 

哪个基本上会转换为SELECT * FROM Products

其他一些选择样本:

  var products = from p in db.Products where p.Category.Name == "Beverages" select p; var products = from p in db.Products orderby p.Name select p; 

在我看来,最好的解决方案是在db和应用程序(某种类型的数据层)之间创建中间类,其中有许多方法用于管理查询。 以下描述基于SQLite作为SQLServer(ADO连接器)的类比

提到类可以通过单例,你可以在应用程序中的任何地方调用它实例 – 对于SQLite,它看起来像这样:

 private static SQLite instance; public static SQLite getInstance() { if(instance == null) { instance = new SQLite(); thread = Thread.CurrentThread.ManagedThreadId; } return instance; } 

您可以这样获取实例:

 SQLite db = SQLite.getInstance(); 

此类可以包含多个数据操作方法,例如:

 public SQLiteCommand prepareQuery(string sql) { cmd = new SQLiteCommand(sql, conn); return cmd; } public SQLiteDataReader executeReader() { return cmd.ExecuteReader(); } public int executeInt() { object obj = cmd.ExecuteScalar(); return (int)obj; } 

还有事务管理和诊断方法。 所以现在 – 你可以在你的应用程序中使用类似这样的类,如果你有其他数据库源甚至数据库类型,你可以创建下一个数据层(例如对于Oracle或MSSQL,MySQL ……),每个数据层都实现了相同的界面例如:

 IDataBase 

现在,你有一些外观,你可以根据需要动态地替换。 从这个时候在应用程序中使用db集中在一个地方,程序员使用它是非常高兴的 – 这是我的建议。

NHibernate是要走的路。 有关更多信息,请参见http://nhforge.org和http://sf.net/projects/nhibernate 。

Entity Framework和NHibernate之间的主要区别在于Entity Framework仅适用于Microsoft SQL Server(Oracle受支持,但支持并不理想)。 NHibernate支持许多许多数据库。