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

推荐订阅源

有赞技术团队
有赞技术团队
美团技术团队
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
博客园_首页
雷峰网
雷峰网
V
V2EX
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
量子位
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Jina AI
Jina AI
月光博客
月光博客
L
LangChain Blog

博客园 - 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;
            }
        }
    }