A simple example, User is many to many relationship with Role,
in database view, there are 3 tables, tbl_user,tbl_role, tbl_user_role
Implement of save user method,when using Nhibernate, you can write like this:
1 usr = new user();
2
3 usr.username="GuGu is best";
4
5 usr.roles.add(new role(){roleid=1});
6 //if db has exist roleid=1 record, will use existed one,
7 but linq2sql will occur exception
8
9 usr.roles.add(new role(){roleid=2});
10
11 // write a custom base class Repository
12 Repository.Save(usr);
13
14 //it will generate sql for insert/update tbl_user and tbl_user_role
2
3 usr.username="GuGu is best";
4
5 usr.roles.add(new role(){roleid=1});
6 //if db has exist roleid=1 record, will use existed one,
7 but linq2sql will occur exception
8
9 usr.roles.add(new role(){roleid=2});
10
11 // write a custom base class Repository
12 Repository.Save(usr);
13
14 //it will generate sql for insert/update tbl_user and tbl_user_role
but for linq2sql, you must write more ugly:
1 using (myDataContext db = new myDataContext())
2 {
3
4 if (IsAddNew) //you must manual judge whether insert or update
5 {
6 db.Users.InsertOnSubmit(usr);
7 }
8 else
9 {
10
11 //if you use rowversion,just like this, or assign usr's fields value to existUsr one by one
12
13 var existUsr =db.Users.ByUserID(usr.UserID).FirstOrDefault();
14 if(existUsr!=null)
15 usr.Version = existUsr.Version;
16 db.Users.Attach(usr, true);
17 }
18 db.SubmitChanges();
19 }
2 {
3
4 if (IsAddNew) //you must manual judge whether insert or update
5 {
6 db.Users.InsertOnSubmit(usr);
7 }
8 else
9 {
10
11 //if you use rowversion,just like this, or assign usr's fields value to existUsr one by one
12
13 var existUsr =db.Users.ByUserID(usr.UserID).FirstOrDefault();
14 if(existUsr!=null)
15 usr.Version = existUsr.Version;
16 db.Users.Attach(usr, true);
17 }
18 db.SubmitChanges();
19 }
if you want to delete a user, but there are FK reference to it, in linq2sql, you should manual delete the many to many object,
using (myDataContext db =new myDataContext())
{
db.UserRoles.DeleteAllOnSubmit(
db.UserRoles.Where(t => t.UserID == userID));
db.Users.Delete(userID);
db.SubmitChanges();
}
{
db.UserRoles.DeleteAllOnSubmit(
db.UserRoles.Where(t => t.UserID == userID));
db.Users.Delete(userID);
db.SubmitChanges();
}
分类:
NHibernate
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?