惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Blog — PlanetScale
Blog — PlanetScale
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
D
DataBreaches.Net
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Fortinet All Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
Recent Announcements
Recent Announcements
Jina AI
Jina AI
G
Google Developers Blog
腾讯CDC
博客园_首页
博客园 - 【当耐特】

博客园 - Sphix

根据银行卡获取银行卡开户银行和类型 HTTP could not register URL http://+:8000/testservice/. Your... 一些必不可少的Sublime Text 2插件 C# CultureInfo列表 解决"There is already an open DataReader associated with this Command which must be closed first." exception in EF 中 C#正则表达式整理备忘 Lucene.net 开发记录 在Asp.net 4.0 中动态注册HttpModule ASP.net 视频上传转换flv并且抓取第一帧生成图片源码 揭秘全球最大网站Facebook背后的那些软件 asp.net网站管理工具 的 地址(Web Site Administration Tool ) Sql Server 2008 Full-text search Error: Word breaking timed out for the full-text query string. Associations in EF Code First CTP5: Part 1 – Complex Types C# Enum 类型的本地化 wordpress 文章缩略图功能 简单实际的方式分隔Admin 区域 C#验证文件类型 Asp.net文件下载 SQLite 资源汇总
EF4 中Self-track entity 错误用于单web开发中要注意的地方
Sphix · 2011-03-21 · via 博客园 - Sphix

Self-track entity 增删改查注意的地方,由于在单web中没有WCF的序列化和反序列化处理,在更新的时候,单纯的ApplyChanges()无法进行状态的改变,有两种方案

1.在获得对象的时候,用对象的StartTrack 方法来强制开启对象自跟踪。

2.由于第一种方法有时候,很难知道对象获取的地方,开启跟踪比较麻烦。我们可以在更新的时候强制设置跟踪状态方法,如:course.MarkAsModified(); 但这个方法也有个不好,我们必须为Add,Delete,Modify进行不同的处理,来调用不同的MarkAs...等状态标记方式。

public class CourseService
    {
        
public void Update(Course course)
        {
            
using (SchoolEntities db = new SchoolEntities())
            {
                
//如果不在同一个Entity Context只能用这种方式
                course.MarkAsModified();
                db.ApplyChanges(
"Courses", course);
                db.SaveChanges();
            }
        }
public void Add(Course course)
        {
            
using (SchoolEntities db = new SchoolEntities())
            {
                db.Courses.AddObject(course);
                db.SaveChanges();
            }
        }
public void Delete(Course course)
        {
            
using (SchoolEntities db = new SchoolEntities())
            {
                course.MarkAsDeleted();
                db.Courses.ApplyChanges(course);
                db.SaveChanges();
            }
        }
//关联删除
        public void DeleteDepartment(int did)
        {
            
using (SchoolEntities db = new SchoolEntities())
            {
                var department 
= db.Departments.Include("Courses").FirstOrDefault(d => d.DepartmentID == did);//必须先ToList,不知道为什么
                foreach(var c in department.Courses.ToList())
                {
                    db.DeleteObject(c);
                }

                db.DeleteObject(department);

//如果不在同一个entity context下,要用标记的方式
                
//department.MarkAsDeleted();
                
//db.Departments.ApplyChanges(department);
                db.SaveChanges();
            }
        }
public Course GetCourse(int id)
        {
            
using (SchoolEntities db = new SchoolEntities())
            {
                var course
=db.Courses.FirstOrDefault(c => c.CourseID == id);
                
return course;
            }
        }
    }