有没有理由使用LINQ to SQL,或者我应该直接使用Entities?
作为一位忠实的LinqToSql用户,我并不客观,但这是可以回答的问题。
对象关系映射技术是解决或减轻对象关系阻抗不匹配的尝试。它们是连接两个世界 - 对象世界和关系数据世界的桥梁。
似乎这些桥梁的开发人员通常都将其中一个视作自己的家。
LinqToSql是从对象方面的ORM。它由C#团队开发,可以让你使用对象来表示数据。在LinqToSql中,没有编译器不透明的字符串,所有查询都会根据映射被编译器检查。
EF是从数据方面的ORM。它由ADO团队开发,可以让你使用表示为对象的数据。在EF中,有大量不透明的字符串。
查询必须最终针对数据库运行,而编译器无法保证运行时可用的数据库与映射匹配(无论是哪种ORM都是如此)。由于数据世界的这个现实,数据团队不像C#团队那样重视编译器保证。
作为一名多年在TSQL后端工作、没有编译器保护的开发人员,我很高度珍视编译器提供给我的任何帮助。因此我支持C#团队。
例如,加载一个客户及其订单。
//linq to sql.
DataLoadOptions load = new DataLoadOptions();
load.LoadWith<Customer>(c => c.Orders); //<
myDataContext.LoadOptions = load;
IQueryable<Customer> query = myDataContext.Customers
.Where(c => c.CustomerId == 1);
//entity framework
IQueryable<Customer> query = myObjectContext.Customers
.Include("Orders") // <
.Where(c => c.Customer.Id == 1);