相关疑难解决方法(0)

查找实体框架上下文

通过我在这里和其他论坛提出的各种问题,我得出的结论是,在实体框架中生成的实体上下文对象时,我不知道我在做什么.

作为背景,我有很多使用LLBLGen Pro的经验,实体框架对我来说大约有三周的时间.

假设我有一个名为"myContext"的上下文.在我的模型中有一个名为Employee的表/实体,所以我现在有一个myContext.Employees.我假设这意味着此属性表示我的上下文中的Employee实体集.但是,我假设错了,因为我可以在上下文中添加一个新实体:

myContext.Employees.AddObject(new Employee());
Run Code Online (Sandbox Code Playgroud)

而这个新的Employee实体在myContext.Employees 中无处可见.从我收集的内容来看,找到这个新添加的实体的唯一方法是在myContext.ObjectStateManager中隐藏它.这听起来像myContext.Employees集实际上不是上下文中的Employee实体集,而是数据库中存在的Employee实体的某种表示.

为了进一步加剧这种混乱,让我们说我正在看一个单一的Employee实体.有一个Project实体与Employee有一个M:1的关系(一个员工可以有多个项目).如果我想向特定员工添加新项目,我只需:

myEmployee.Projects.Add(new Project());
Run Code Online (Sandbox Code Playgroud)

太棒了,这实际上就像我期望的那样将项目添加到集合中.但是,面对上下文中ObjectSet属性的工作原理,这种情况仍然存在.如果我将新项目添加到上下文中:

myContext.Projects.AddObject(new Project());
Run Code Online (Sandbox Code Playgroud)

这不会改变项目集.

如果有人向我解释这一点,我将非常感激.另外,我真的想要上下文中所有Employees(或Projects)的集合,并且我希望它可用作上下文的属性.这可能与EF有关吗?

entity-framework entity-framework-4

13
推荐指数
1
解决办法
1630
查看次数

实体框架更新检查记录是否已更改

我正在使用EF更新数据库表.

它是连接模式下的一个简单场景.

我得到了我想要更新的行

var order = from o in Orders
        where o.ID = 1
        select o;
Run Code Online (Sandbox Code Playgroud)

然后我将记录更新为:

order.FirstName = "First";
order.LastName = "Last";
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

它工作正常.EF检查字段是否已更改,并仅在其为新值时更新字段.我在我的SQL服务器上启用了CDC,以检查如果值没有更改,EF不会重写到数据库.

现在我想把这个检查放在我的代码中以获得额外的逻辑,即我希望EF告诉我何时更新记录,何时不记录(因为值没有改变).任何人都可以告诉我是否有办法?

我不想手动检查每个字段,因为我有很多要比较的字段.

谢谢

entity-framework

4
推荐指数
2
解决办法
8373
查看次数