随笔 - 435  文章 - 0  评论 - 111  阅读 - 62万 

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
复制代码


 

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             }
复制代码


 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();
}
复制代码


 

 

posted on   Gu  阅读(208)  评论(0编辑  收藏  举报
编辑推荐:
· 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爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示