vs2010 mysql linq to sql 系列_LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据...
LINQ和 LINQ to SQL 都已經不是一個新事物了,但是我接觸的比較晚,本著絕知此事要躬行的態度,決定寫這個系列。
本文使用的測試環境是VS 2010,和sql server 2005數據庫。
第一篇?????? 從CUD開始,如何使用LINQ? to SQL插入、修改、刪除數據
準備工作,現在數據庫中建好測試表Student,這個表只有三個字段ID,Name,Hometown,其中ID為int類型的自增長字段,Name和Howmtown是nvarchar類型
1. 打開VS2010新建控制臺應用程序,然后添加LINQ to SQL Class,命名為DbApp.dbml,新建dbml文件之后,可以打開server explorer,建立數據庫連接,并將我們新建的表拖到dbml文件中,結果如下圖
2. 可以通過點擊dbml文件空白處,按F4顯示dbml屬性,可以修改Context和生成實體的命名空間
3. 到現在為止VS2010通過工具為我們創建好了數據表對應實體類和數據表操作添,改,刪的方法,現在開始實踐
1)?添加 Add
static void Add()
{
//添加一個Student
Student aStudent = new Student
{
Name = "張小二",
Hometown = "南海觀音院"
};
Console.WriteLine("----------begin Add a student");
using (DbAppDataContext db = new DbAppDataContext())
{
db.Log = Console.Out;
db.Students.InsertOnSubmit(aStudent);
db.SubmitChanges();
}
Console.WriteLine("----------End Add a student");
}
輸出的sql語句
INSERT INTO [dbo].[Student]([Name], [Hometown])
VALUES (@p0, @p1)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [張小二]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [南海觀音院]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
2) 使用linq to sql執行Edit 編輯操作
private static void Edit(int id)
{
Console.WriteLine("----------begin edit");
using (DbAppDataContext db = new DbAppDataContext())
{
db.Log = Console.Out;
//取出student
var editStudent = db.Students.SingleOrDefault(s=>s.ID == id);
if (editStudent == null)
{
Console.WriteLine("id錯誤");
return;
}
//修改student的屬性
editStudent.Name = "張小三";
editStudent.Hometown = "張家口張家寨張家營";
//執行更新操作
db.SubmitChanges();
}
Console.WriteLine("---------end edit Student");
}
輸出的sql語句
SELECT [t0].[ID], [t0].[Name], [t0].[Hometown]
FROM [dbo].[Student] AS [t0]
WHERE [t0].[ID] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
UPDATE [dbo].[Student]
SET [Name] = @p3, [Hometown] = @p4
WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Hometown] = @p2)
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [張小二]
-- @p2: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [南海觀音院]
-- @p3: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [張小三]
-- @p4: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [張家口張家寨張家營]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
3)使用linq to sql 執行刪除操作
執行代碼:
static void Delete(int id)
{
Console.WriteLine("-----------begin delete a student");
using (DbAppDataContext db = new DbAppDataContext())
{
db.Log = Console.Out;
//取出student
var student = db.Students.SingleOrDefault(s => s.ID == id);
if (student == null)
{
Console.WriteLine("student is null");
return;
}
db.Students.DeleteOnSubmit(student);
db.SubmitChanges();
}
Console.WriteLine("------------end Delete student");
}
生成的sql語句:
SELECT [t0].[ID], [t0].[Name], [t0].[Hometown]
FROM [dbo].[Student] AS [t0]
WHERE [t0].[ID] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
DELETE FROM [dbo].[Student] WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Hometown
] = @p2)
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [張小三]
-- @p2: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [張家口張家寨張家營]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
總結:通過以上實踐可以看到使用linq to sql執行增改刪操作,非常方便,我們甚至不需要學習任何sql相關的知識。
我有兩點疑惑,請各位指點:
1.? 是否是在執行update和delete時必須先獲得實體,然后才能執行操作,我嘗試在update時,不去數據庫中獲取實體,而是自己聲明一個實體,然后去刪除,但是失敗了
2.? 在生成的update和delete的條件語句中包含name=@p和hometown=@p的語句,按理說link to sql已經知道id是唯一的主鍵,為什么還會傳這些沒有的條件進去的
總結
以上是生活随笔為你收集整理的vs2010 mysql linq to sql 系列_LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【效率】推荐一款Markdown神器 !
- 下一篇: 【深度学习】90.94%准确率!谷歌刷新