延續上篇 ADO.Net Entity Framework (十一) : 關聯式資料 - 查詢 ,
這次來分享一下新增的語法,並介紹如何在新增關聯式資料時,
利用EntityKey,來提升效能
延續上篇 ADO.Net Entity Framework (十一) : 關聯式資料 - 查詢 ,
這次來分享一下新增的語法,
首先來看一下 示範資料庫的 ER-Model
User 使用者
Group 群組
UserDepartment 使用者部門
需求是要建立一個 User 包含 UserDepartment 以及 Group,
直接來看語法
方式一
using (TestEntities te = new TestEntities())
{
////新增一個 User
User u = new User()
{
User_name = "David",
User_email = "asdtey@yahoo.com.tw",
////此為多對一時的新增方式
UserDepartment = te.UserDepartment.Where(a => a.UserDepartment_name == "開發部").First()
};
////新增User屬於的群組
////先取得要新增的群組
Group g1 = te.Group.Where(a => a.Group_name == "攝影社").First();
Group g2 = te.Group.Where(a => a.Group_name == "開發二").First();
////多對多的新增方式
u.Group.Add(g1);
u.Group.Add(g2);
te.AddToUser(u);
////儲存
te.SaveChanges();
}
此方法可以順利新增一個 User 同時包含 UserDepartment 以及 Group,
不過有個問題是說仔細去看語法時,
會發現在新增之前會先去資料庫取得UserDepartment 以及 Group 的資料,才進行新增,
但我只是要新增 User ,並沒有要取得 UserDepartment 、 Group 的資料,
每次新增都先去資料庫撈資料,會影響效能,
這邊分享另一種寫法
方法二
////方式二
using (TestEntities te = new TestEntities())
{
////新增一個 User
User u = new User()
{
User_name = "David",
User_email = "asdtey@yahoo.com.tw",
};
////此為多對一時的新增方式
UserDepartment userDepartment = new UserDepartment()
{
EntityKey = new EntityKey("TestEntities.UserDepartment", "UserDepartment_id", 1),
UserDepartment_id = 1
};
te.Attach(userDepartment);
u.UserDepartment = userDepartment;
//////多對多的新增方式
Group g1 = new Group()
{
EntityKey = new EntityKey("TestEntities.Group", "Group_id", 1),
Group_id = 1
};
te.Attach(g1);
u.Group.Add(g1);
Group g2 = new Group()
{
EntityKey = new EntityKey("TestEntities.Group", "Group_id", 2),
Group_id = 2
};
te.Attach(g2);
u.Group.Add(g2);
////儲存
te.AddToUser(u);
te.SaveChanges();
}
此方法利用EntityKey讓ObjectContext知道我們要關聯的物件是甚麼,
就不會先去資料庫撈資料,提升效能,
但是缺點是要打的code變多了,也缺少IntelliSence
再分享一下,如果只要新增User以及UserDepartment(多對一關係)時,
還可以這樣寫,
方法三
////方式三
using (TestEntities te = new TestEntities())
{
////新增一個 User
User u = new User()
{
User_name = "David",
User_email = "asdtey@yahoo.com.tw",
};
u.UserDepartmentReference.EntityKey = new EntityKey("TestEntities.UserDepartment", "UserDepartment_id", 1);
////儲存
te.AddToUser(u);
te.SaveChanges();
}
建議在大量新增的時候 可以使用方法二 避免影響效能及資料庫
參考資料
EntityKey
ObjectContext..::.Attach 方法
- 如果您覺得這篇文章有幫助,請您幫忙推薦一下或按上方的"讚"給予支持,非常感激
- 歡迎轉載,但請註明出處
- 文章內容多是自己找資料學習到的心得,如有不詳盡或錯誤的地方,請多多指教,謝謝