我的大部分服务器端体验都是使用nodeJS meteor或rails,所以我还没有丰富的.Net知识。在rails中,很容易选择ORM,因为ActiveRecord是城里唯一的游戏,或者看起来如此。我的方法通常是使用ORM查询所有内容,如果你不能将它拉下来,那么请下拉到原始SQL。
但是,我正在尝试阅读有关在.Net 4.5或更新的应用程序中查询我的数据库的教程和课程,我对未来的方式感到困惑。我在下面看到教程
- Linq Lambda语法
- Linq查询语法
- 实体框架
现代.net应用程序的建议ORM是什么? 看起来我可以在上述所有内容中进行基本的CRUD操作。但是,一个人更适合说跨表加入吗?请注意,我只计划针对我的.net解决方案查询Microsoft SQL服务器数据库。
让我感到困惑的是阅读EF取代linq然后阅读EF也使用了linq。因此,当我看到一个例子说选择所有列我不知道我是否使用过去或未来的语法。也只是看代码我不知道它的linq或EF。我可以告诉它的查询或lambda语法。
您提到的选项并不是所有ORM,在这3中唯一的ORM是EF。 .net中还有其他流行的ORM,包括:
- NHibernate的
- LLBLGen亲
- ActiveRecord的
他们中的大多数都支持LINQ。 EntityFramework是较年轻的,但是它与VS的集成并且开箱即用可以使它成为.net中最受欢迎的ORM,它将LINQ替换为实体而不是LINQ本身。
msdn中定义的LINQ(语言集成查询)可以与不同的数据源一起使用。
LINQ是一组扩展强大查询功能的功能
C#的语言语法。 LINQ引入标准,易于学习
查询和更新数据的模式,技术可以
扩展到可能支持任何类型的数据存储。互联网
框架包括支持使用的LINQ提供程序程序集
LINQ with .NET Framework集合,SQL Server数据库,ADO.NET
数据集和XML文档。
有两种不同的语法可以使用LINQ,主要称为Fluent语法和Query语法。
如果您刚才提到.net,我建议使用EF语言流畅,这将是开始在.net中查询数据库的最快方法。
简短的回答是实体框架。
我认为令人困惑的是,您可以将Linq Lambda和Linq Query语法与Entity Framework一起使用。但未来(在我看来)是Fluent API。
我一直在使用Entity Framework 7(预发布),我得到的印象是它专注于Fluent API。哪个对我很好,因为我比Linq语法更喜欢它。
试试Vega https://github.com/aadreja/vega 它使用简单,是最快的.net ORM之一,具有许多令人兴奋的功能。
以下是开始的步骤: -
1)创建一个从Vega.EntityBase派生的实体类
示例: -
[Table(NeedsHistory = true)]
public class Country : EntityBase
{
[PrimaryKey(true)]
public int Id { get; set; }
public string Name { get; set; }
public string ShortCode { get; set; }
}
2)执行CRUD操作
插入 - 只需为插入创建实体和设置属性。创建一个连接对象,将其传递给Repository并调用Add方法,该方法将返回新创建记录的Id
Country country = new Country()
{
Name = "India",
ShortCode = "IN",
CreatedBy = 1 //user id created record
};
using (SqlConnection connection = new SqlConnection(conString))
{
Repository<Country> countryRepo = new Repository<Country>(connection);
int result = (int)countryRepo.Add(country);
}
更新 - 更新记录使用存储库的更新方法
City city = new City()
{
Id = 1,
Name = "Ahmedabad",
State = "GU",
CountryId = 1,
Longitude = 102.23m,
Latitude = 124.23m,
UpdatedBy = 1
};
using (SqlConnection con = new SqlConnection(connectionString))
{
Repository<City> cityRepo = new Repository<City>(con);
bool result = cityRepo.Update(city);
}
读取列表 - 读取具有指定条件的所有记录,并将其转换为可转换为List的可枚举对象。
//read all records
using (SqlConnection con = new SqlConnection(connectionString))
{
Repository<City> cityRepo = new Repository<City>(con);
List<City> cityList = cityRepo.ReadAll().ToList();
}
//read all with specified dynamic criteria
using (SqlConnection con = new SqlConnection(connectionString))
{
Repository<City> cityRepo = new Repository<City>(con);
List<City> cityList = cityRepo.ReadAll("Name=@Name", new { Name = "Ahmedabad" }).ToList(); //Dynamic criteria
}
请参阅更多文档 https://github.com/aadreja/vega/wiki/Repository