📜  LINQ to SQL CRUD操作(1)

📅  最后修改于: 2023-12-03 15:17:19.788000             🧑  作者: Mango

LINQ to SQL CRUD操作介绍

什么是LINQ to SQL?

LINQ是Language Integrated Query的缩写,它是一个.NET Framework 3.0及以上版本中的组件,可用于在C#或VB.NET中编写查询。LINQ to SQL是一种LINQ提供程序,它可以将SQL Server数据库中的表映射到.NET对象上,并提供了一种方便的方式来执行CRUD(Create Retrieve Update Delete)操作。

如何使用LINQ to SQL进行CRUD操作?

在使用LINQ to SQL进行CRUD操作之前,需要先创建一个LINQ to SQL数据上下文,并在该上下文中定义要映射的表信息。以下是创建LINQ to SQL数据上下文的代码片段:

public class MyDataContext : DataContext
{
    public MyDataContext() : base("Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=True")
    {
    }
 
    public Table<Employee> Employees 
    {
        get 
        {
            return this.GetTable<Employee>();
        }
    }
 
    // 其他表定义...
}

在上面的代码中,我们定义了一个名为"MyDataContext"的数据上下文,并且声明了一个名为"Employees"的表,该表将映射到名为"Employee"的SQL Server表。在使用LINQ to SQL进行CRUD操作时,我们可以使用以下代码片段:

创建(Create)
MyDataContext context = new MyDataContext();
 
Employee employee = new Employee();
employee.FirstName = "John";
employee.LastName = "Doe";
employee.JobTitle = "Developer";
employee.Salary = 5000;
 
context.Employees.InsertOnSubmit(employee);
context.SubmitChanges();

在上面的代码中,我们创建了一个名为"employee"的新Employee对象,并将其插入到上下文的"Employees"表中。最后,使用"SubmitChanges"方法将更改提交到数据库中。

检索(Retrieve)

我们可以使用以下代码片段来检索匹配指定条件的Employee对象:

MyDataContext context = new MyDataContext();
 
var employees = from e in context.Employees
                where e.JobTitle == "Developer"
                select e;

在上面的代码中,我们查询出了所有"JobTitle"等于"Developer"的Employee对象。

更新(Update)

使用以下代码片段可以更新Employee对象:

MyDataContext context = new MyDataContext();
 
Employee employee = (from e in context.Employees
                     where e.EmployeeID == 1
                     select e).SingleOrDefault();
 
if (employee != null)
{
    employee.FirstName = "Jane";
    employee.LastName = "Doe";
    employee.JobTitle = "Manager";
 
    context.SubmitChanges();
}

在上面的代码中,我们查询出"name"为"John"和"lastName"为"Doe"的Employee对象,然后更新它的一些属性,并使用"SubmitChanges"方法将更改提交到数据库中。

删除(Delete)

使用以下代码片段来删除Employee对象:

MyDataContext context = new MyDataContext();
 
Employee employee = (from e in context.Employees
                     where e.EmployeeID == 1
                     select e).SingleOrDefault();
 
if (employee != null)
{
    context.Employees.DeleteOnSubmit(employee);
    context.SubmitChanges();
}

在上面的代码中,我们查询出ID为1的Employee对象,并将其删除。最后,使用"SubmitChanges"方法将更改提交到数据库中。

对LINQ to SQL CRUD操作进行扩展

在一些情况下,我们需要对LINQ to SQL的CRUD操作进行扩展。例如,我们想要实现一些自定义操作,比如在执行插入操作时自动设置Employee对象的"CreatedAt"属性。

对于这类情况,我们可以通过扩展"DataContext"和"Table"类来实现自定义操作。以下是一个扩展DataContext类的代码片段:

public partial class MyDataContext
{
    partial void InsertEmployee(Employee instance)
    {
        instance.CreatedAt = DateTime.Now;
        this.ExecuteDynamicInsert(instance);
    }
}

在上面的代码中,我们通过部分类定义了一个名为"MyDataContext"的数据上下文并重载了InsertEmployee方法。在该方法中,我们设置了一个名为"CreatedAt"的Employee属性,并使用"ExecuteDynamicInsert"方法插入了employee对象。

注意,我们还必须从设计时更改DataContext的访问修饰符,以便我们可以访问生成代码中的部分类。要执行此操作,请打开"LinqToSql"设计器并选择"View Code"菜单选项。以下是一个扩展Table类的代码片段:

public partial class Employee
{
    public void SetSalary(decimal salary, bool saveChanges)
    {
        this.Salary = salary;
 
        if (saveChanges)
        {
            MyDataContext context = new MyDataContext();
            context.SubmitChanges();
        }
    }
}

在上面的代码中,我们通过重载Employee类来添加设置Salary属性的自定义方法。此方法还可以选择性地将更改提交到数据库中。

结论

LINQ to SQL是一种方便的方式,可在C#或VB.NET中执行基本的CRUD操作。此外,我们可以通过扩展DataContext和Table类来实现自定义操作。总之,LINQ to SQL是.NET开发人员必须掌握的技能之一。