本教程将引导您通过创建一个简单的应用技术支持LINQ to SQL技术。在不到5分钟,您将有随时可以使用的数据访问层为您的业务对象
示例介绍目录如下:
介绍了LINQ to SQL技术
要求
编写项目
从数据库生成模型
查询数据
插入新数据
更新数据
删除数据
其他信息
介绍了LINQ to SQL技术
LINQ主张语言综合查询,这意味着数据检索已不再是一个独立的语言。 LINQ引擎允许的。 NET应用程序连接到数据库困扰许多关于列和行。您收到的数据是自动生成的对象准备使用你的业务逻辑。
LINQ to Relational Data 可能会被认为是一个对象关系映射(ORM)的工具。该类型安全LINQ查询得到汇编成MSIL的执行,以及查询的条款翻译成SQL和送交的SQLite数据库执行。这使得您的数据访问层安全,更快捷,更方便大大设计。
要求 :
为了连接到你需要的SQLite数据库服务器本身的运行,为的SQLite dotConnect安装和IDE运行。 LINQ到SQL需要的。 NET Framework 3.5和Visual Studio 2008 ,和的SQLite数据库3或更高版本。请注意:LINQ to SQLite功能仅适用于专业版的SQLite的dotConnect的。
在本教程假定您已经拥有的数据库对象创建。你必须执行一个脚本从下列文件如果您尚未这样做:
编写项目
创建一个新的控制台应用程序在Visual Studio 。它可以是任何其他项目类型的,但是为了简单起见我们将使用控制台项目整个教程。其余的教程假定该项目的名称是ConsoleApplication1 。如果您的项目被命名否则,你将不得不替代这个名字与实际的解决方案资源管理器。
1、从数据库生成模型
添加Devart LINQ to SQL Model模型项目。为此,右键单击引用节点在解决方案资源管理器,指向添加,单击新建项目....在添加新项目对话框中选择数据,选择Devart LINQ to SQL范本,并单击添加。这将自动发射实体开发,修改和保存该示范项目。
2、主菜单中的实体开发,选择文件|创建数据库。这发射数据库逆向工程向导。
3、单击下一步在欢迎屏幕上。由于这种情况的实体开发调用从Visual Studio的LINQ to SQL模式,选择的框架中禁用此画面。
4、填写连接设置,然后单击下一步。
5、选择数据库对象将用于模型。所有这些物件从crm_demo脚本,包括辅助表。单击下一步。
6、在下一屏幕上您可以调整命名规则的实体及其成员。为客户演示数据库没有规则的要求,因此只需单击下一步。
7、输入CrmDemoData的名字空间,并CrmDemoDataContext的名称DataContext之后。这将是名称的主要数据访问类。单击下一步。
8、点击下一步完成。并生成代码模型是开放emd设计框架代码。
9、在主菜单上,单击文件|保存项目。这将更新DataContext1模型在Visual Studio 。
该模型您刚刚产生准备使用。您可以检查它的实体开发视觉与图和toolwindows ,编辑的各个方面的课程和关系,添加新的模型元素。请记住,您保存该项目,使开发实体的变化反映在Visual Studio 。
该向导创建的所有选定的课程表,代表实体。它还建立了一个System.Data.Linq.DataContext,它控制的连接到数据库,整个数据流。这个类包含的属性和方法的命名数据库对象。您将使用这些成员检索和修改数据的范畴。这些代码包含在该文件DataContext.cs ( DataContext.vb ) 。
查询数据
所有LINQ to SQLite的操作,可以以执行通过DataContext,这是命名CrmDemoDataContext本指南中。撷取资料,你必须首先创建一个实例的情况下,然后编写查询LINQ to SQL ,然后访问该对象返回的查询,这可能是一个收集的对象或一个对象。
让我们看所有的数据从表公司,排序它CompanyID ,输出一些列。添加以下代码块的方法主要:
[C#] cs
CrmDemoDataContext context = new CrmDemoDataContext(); var query = from it in context.Companies orderby it.CompanyID select it; foreach (Company comp in query) Console.WriteLine("{0} | {1} | {2}", comp.CompanyID, comp.CompanyName, comp.Country); Console.ReadLine();
[Visual Basic] vb
Dim context As CrmDemoDataContext = New CrmDemoDataContext Dim query = From it In context.companies _ Order By it.CompanyID _ Select it Dim comp As company For Each comp In query Console.WriteLine("{0} | {1} | {2}", comp.CompanyID, comp.CompanyName, comp.Country) Next Console.ReadLine()
就这么简单。您的查询语句,然后迭代通过它你会做一个平常收集的对象。该数据库的互动是由LINQ to SQLite的背景。现在让我们看看谁是谁在此代码示例。
通过CrmDemoDataContext的名字是内容可以知道所有关于您的模型架构,及其一切处理操作。所有LINQ to SQLite的操作,以履行在这一类的属性和方法。建议您保留一个实例的整个您的申请,因为它消耗大量的资源,和实体不得通过不同的数据共享环境。
查询,它是任意的变量名称中的LINQ to SQL语句。前者是用于收集数据的对象,后者则是没有使用以外的声明。
context.Companies指的是公共财产, CrmDemoDataContext上下文。这个属性代表了收集的所有数据的范畴。
公司(在foreach声明)的名字是一个产品和一流的。这个类映射到表中的公司的数据库和它的名字来自于它。
以下是该项目的产量在控制台:
请注意:LINQ to SQL查询代码只是描述了查询。它不执行。这种做法被称为推迟执行。
现在让我们来查询数据从两个表美国与外国的关键。取代旧的代码如下:
[C#]
CrmDemoDataContext context = new CrmDemoDataContext(); var query = from it in context.Companies orderby it.CompanyID select it; foreach (Company comp in query) { if (comp.PersonContacts.Count > 0) { Console.WriteLine("{0} | {1} | {2}", comp.CompanyName, comp.PersonContacts[0].FirstName, comp.PersonContacts[0].LastName); } } Console.ReadLine();
[Visual Basic]
Dim context As CrmDemoDataContext = New CrmDemoDataContext Dim query = From it In context.companies _ Order By it.CompanyID _ Select it Dim comp As company For Each comp In query If comp.personcontacts.Count > 0 Then Console.WriteLine("{0} | {1} | {2}", _ comp.CompanyName, comp.personcontacts(0).FirstName, _ comp.personcontacts(0).LastName) End If Next Console.ReadLine()
正如你所看到的, LINQ to SQL查询声明没有改变。这些数据的联络人是取自数据库时会自动进入相应的财产,该控制的对象。这是一个伟大的事情LINQ到SQL :您不必担心相依写作时查询。
插入新数据
什么是增加早些时候行表,现在仅仅是增加了新的对象范围内集合。当您准备好发送到数据库的变化,呼吁SubmitChanges ( )方法的范围内。在此之前,你首先必须将所有属性,不支持空(没有)的价值。该SubmitChanges ( )方法生成和执行命令,执行相当于INSERT , UPDATE或DELETE语句对数据源。
让我们添加一个新产品和新的一类数据库。取代旧的代码如下:
[C#]
CrmDemoDataContext context = new CrmDemoDataContext(); // Create a new category ProductCategory newCategory = new ProductCategory(); newCategory.CategoryID = 1000; newCategory.CategoryName = "New category"; // Create a new product Product newProduct = new Product(); newProduct.ProductID = 2000; newProduct.ProductName = "New product"; newProduct.Price = 20; // Associate the new product with the new category newProduct.ProductCategory = newCategory; context.Products.InsertOnSubmit(newProduct); // Send the changes to the database. // Until you do it, the changes are cached on the client side. context.SubmitChanges(); // Request the new product from the database var query = from it in context.Products where it.ProductID == 2000 select it; // Since we query for a single object instead of a collection, we can use the method First() Product product = query.First(); Console.WriteLine("{0} | {1} | {2}", product.ProductCategory.CategoryName, product.ProductName, product.Price); Console.ReadLine();
[Visual Basic]
Dim context As CrmDemoDataContext = New CrmDemoDataContext ' Create a new category Dim newCategory As productcategory = New productcategory() newCategory.CategoryID = 1000 newCategory.CategoryName = "New category" ' Create a new product Dim newProduct As product = New product() newProduct.ProductID = 2000 newProduct.ProductName = "New product" newProduct.Price = 20 ' Associate the new product with the new category newProduct.productcategory = newCategory context.products.InsertOnSubmit(newProduct) ' Send the changes to the database. ' Until you do it, the changes are cached on the client side. context.SubmitChanges() ' Request the new product from the database Dim query = From it In context.products _ Where it.ProductID = 2000 _ Select it ' Since we query for a single object instead of a collection, we can use the method First() Dim product As product = query.First() Console.WriteLine("{0} | {1} | {2}", _ product.productcategory.CategoryName, product.ProductName, product.Price) Console.ReadLine()
该InsertOnSubmit ( )方法创建的每一个集合的范畴。这种方法储存在数据库中的信息都与物体。如范例中所示,它只是必要呼吁InsertOnSubmit ( )再次向这两个产品和品类的物体。
注意,在你添加新的产品和类别,提交变更,您就可以不执行这一解决方案是再次。为执行解决方案再次更改身份证的对象将增加。
更新数据
实体的情况下被修改如常。唯一要记住的是,你必须援引SubmitChanges( )方法来发送数据到数据库中。
附加以下块现有的代码和启动项目:
[C#]
product.ProductName = "Edited product"; product.Price = 15; context.SubmitChanges();
[Visual Basic]
product.ProductName = "Edited product" product.Price = 15 context.SubmitChanges()
删除数据
要提取的一个实例从上下文使用DeleteOnSubmit相应的方法收集。对象是从收集的类型,而不是摧毁。如果要删除对象的数据从数据库中调用SubmitChanges ( )方法。
为此,您可以用一段代码如下所示:
[C#]
context.products.DeleteOnSubmit(newProduct); context.productcategories.DeleteOnSubmit(newCategory); context.SubmitChanges();
[Visual Basic]
context.products.DeleteOnSubmit(newProduct) context.productcategories.DeleteOnSubmit(newCategory) context.SubmitChanges()
删除的对象是受属性模型。当DeleteRule参数级联,依赖对象的自动删除。当此参数SetNull ,依赖对象不会被删除,但关系是无效。当没有规则指定的顺序删除顺序是非常重要的。
其他信息
现在,您可以执行基本的数据处理与LINQ到的SQLite ,可以进入一些高级主题。 dotConnect的SQLite包括为帮助部分专门LINQ to SQL技术。您可以在网上http://www.devart.com/dotconnect/linq/docs/或当地在Visual Studio帮助集合。
LINQ to SQLite是发达国家密切合作,以微软的执行LINQ to SQL ,所以你可能会发现一些有用的信息MSDN中:
LINQ to SQL
LINQ to SQL : 。 NET语言集成查询关系数据库
为亲身体验使用样品运dotConnect为的SQLite 。您可以访问样品从开始菜单。
为了更深入地了解作品的LINQ to SQL引擎,您可以看到生成的SQL语句在DBMonitor或使用DataContext.Log财产。