我是.NET的新手,并且已经了解了几种不同的查询SQL Server数据库的方法,例如ADO.NET和实体框架。
有人可以给我一些关于新应用程序的最佳方法的建议吗?
感谢您提供任何帮助或建议。
答案 0 :(得分:10)
以下是使用EF从数据库生成代码的示例(对于您可能希望从代码生成数据库的真实应用程序):
您将看到一个文件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>
答案 1 :(得分:2)
NHibernate是要走的路。有关详细信息,请参阅http://nhforge.org和http://sf.net/projects/nhibernate。
Entity Framework和NHibernate之间的主要区别在于Entity Framework仅适用于Microsoft SQL Server(Oracle受支持,但支持并不理想)。 NHibernate支持many many many个数据库。
答案 2 :(得分:2)
答案 3 :(得分:2)
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;
答案 4 :(得分:2)
在我看来,最好的解决方案是在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集中在一个地方,程序员使用它是非常愉快的 - 这是我的建议。