2010-10-21 96 views
12

我是.NET新手,听说过查询SQL Server数据库的几种不同方法,如ADO.NET和实体框架。使用C#.Net访问SQL Server数据库的最佳方法

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

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

+0

你有多少编程经验?以前使用过数据库吗? – Onkelborg 2010-10-21 16:22:44

+0

我有一些基本的C#知识,并且知道SQL,我只是没有必须在C#程序之前访问数据库。 – user483267 2010-10-21 16:23:45

+1

这是一个悬而未决的问题。任何好的答案将取决于你想要做什么,你必须使用的时间框架,以及你已经熟悉/熟悉的内容。 – jac 2010-10-21 16:24:01

回答

10

下面是使用EF代码生成从数据库(一个例子一个真正的应用程序你可能想从代码中生成你的数据库):

  1. 右键点击你的项目>>添加>>新建我tem >> 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<Product> 
2

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

实体框架和NHibernate的主要区别在于实体框架仅适用于Microsoft SQL Server(Oracle是支持的,但支持并不理想)。 NHibernate支持many many many数据库。

+1

如果你选择了这个选项,也可以考虑获得流利的NHibernate。 – 2010-10-21 17:30:03

2

Entity Framework是最简单的,并且其内置的。

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

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

+1

如果您正在启动持续数年的项目,请勿使用EF。它会用状态信息污染你的域对象。将迫使您使用特定的编码风格...用于EF的VisualStudio工具只支持一半。对于长项目,我会推荐使用NHibernate。 – 2010-10-21 16:45:01

+0

这样的BS,开箱即可获得具有状态的实体。但还有其他非常简单的选择。你最近还看过EF吗?让我帮你..(http://channel9.msdn.com/Blogs/wriju/POCO-Template-in-ADONET-Entity-Framework) – Nix 2010-10-21 16:57:25

2

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

NorthwindDataContext db = new NorthwindDataContext(); 

    var products = from p in db.Products 
        select p; 

这将基本上转化为SELECT * FROM产品

其他一些选择的样本:

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; 
+2

'var products = db.Products;' – SLaks 2010-10-21 16:26:05

+1

试图展示LINQ语法...这有点类似于SQL – Dismissile 2010-10-21 16:29:10

+0

对于一个新项目的通用ORM解决方案,我会用NHibernate通过Linq-to-sql,但这可能会更容易与开箱即用。 – flatline 2010-10-21 16:54:40

2

在我看来,最好的解决办法是创建数据库和应用程序(某些类型的数据层)之间的中间类的一些用于管理查询方法。 描述下在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集中在一个地方,程序员使用它非常高兴 - 这是我的建议。

+1

可能更容易使用先前存在的数据库抽象,而不是旋转自己的数据库,除非OP的目标纯粹是教育性的。 – Jimmy 2010-10-21 16:58:55

+0

在这种情况下很难获得与所有用户兼容的统一层 – UGEEN 2010-10-21 17:06:42

相关问题