问题标签 [self-tracking-entities]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
312 浏览

wpf - 获取 SelfTracking 实体的真实状态,包括导航属性

如果对象有未保存的更改,我想更改对象的显示。我以为我可以只使用ChangeTracker.State,但如果我更改导航属性,它不会更改为 Modified 。

例如,联系人对象包含电话、地址和电子邮件的导航属性。如果我更改联系人的姓名,状态将更改为已修改,但更改电话会使对象的状态保持不变。

0 投票
2 回答
435 浏览

c# - 为什么实体在消失后仍然得到验证?

  1. 将新实体添加到TrackableCollection( context.Entities.Add(entity)) (EntityState = New)
  2. TrackableCollection不保存,从( )中删除添加的实体context.Entities.Remove(entity)(EntityState = Unmodified)
  3. 节省。( context.SubmitChanges())

我仍然从与实体关联的数据注释中得到验证错误,为什么?

0 投票
1 回答
585 浏览

entity-framework - EF STE 和自引用表的问题

这是我在这里的第一篇文章,所以我希望一切都好。

这是我的问题:我的数据库中有一个名为UserTypes的表。它有:

  1. ID;
  2. 是私人的;
  3. 父ID;

相关的是第一个和第三个。我有另一个名为UserTypes_T的表,其中包含不同类型的信息,即特定于语言的信息。这些字段是:

  1. 语言_ID;
  2. 用户类型_ID;
  3. 姓名;

我想要实现的是从UserTypes表中加载整个层次结构并将其显示在 TreeView 中(这目前不相关)。然后,通过选择一些用户类型,我可以在单独的编辑框(名称)和组合框(父级)中编辑它们。

一切正常,直到我尝试将更改保留在数据库中。EF 为我生成了这些表的两个实体类:

用户类型的类有:

  1. ID;
  2. 是私人的;
  3. 父ID;
  4. 自引用的导航属性(0..1);
  5. 子元素的导航属性;
  6. UserTypes_T 表的另一个导航属性 (1..*);

翻译信息的类有:

  1. 用户类型_ID;
  2. 语言_ID;
  3. 姓名;
  4. UserTypes 表的导航属性 (*..1);
  5. 语言表的导航属性 (*..1);

我得到我需要使用的数据:

在我的 WCF Web 服务中。我可以毫无问题地添加新的用户类型,但是当我尝试更新旧的用户类型时,会发生一些奇怪的事情。

如果我更新根元素(Parent_ID==null)一切正常!如果我更新 Parent_ID!=null 的元素,我会收到以下错误:

AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。

我在整个互联网上搜索并阅读了Diego B Vega(以及更多)的博客文章,但我的问题有所不同。当我更改父用户类型时,我实际上更改了 Parent_ID 属性,而不是导航属性。我总是尝试使用 ID,而不是生成的导航属性以避免出现问题。

我做了一些研究,试图看看我得到的对象图是什么,发现有很多重复的实体:

根元素有一个其子元素的列表。每个子元素都有一个对根或其父元素的反向引用,依此类推。你可以想象。由于我没有使用那些导航属性,因为我使用 ID 来获取/设置我需要的数据,所以我从模型中删除了它们。具体来说,我从UserTypes实体类中删除了第 4点和第 5点。然后我有一个每个元素只有一次的对象图。我尝试了一个新的更新,但我遇到了同样的问题:

根元素更新得很好,但是有一些父元素的元素抛出了同样的异常。

我看到我在UserTypes_T实体类中有一个导航属性,指向一个用户类型,所以我也删除了它。然后这个错误消失了。对象图中的所有项目都是唯一的。但是问题仍然存在 - 我可以毫无问题地更新我的根元素,但是当尝试更新子元素(没有排除)时,我在生成的 Model.Context.Extensions 类中得到了一个空引用异常:

我尝试仅更新名称(在UserTypes_T中),但错误是相同的。

我没有想法,我已经尝试解决这个问题 8 个小时了,所以如果有人给我想法或分享他们的经验,我将不胜感激。

PS:

我成功更新子对象的唯一方法是使用以下代码检索数据:

其中UserType1是导航属性,指向父用户类型,而UserTypes1是导航属性,包含子元素的列表。这里的问题是 EF “修复”对象并将Parent_ID更改为null。如果我再次设置它,EF 也会设置UserTypes1 ......也许有办法阻止这种行为?

0 投票
1 回答
1731 浏览

c# - 如何使用 WCF Ria 服务跟踪实体更改?

我需要将客户端上发生的实体更改记录到数据库表中。但是,当我进行更改并检查 ChangeTracker 属性时,它声称没有发生任何更改。

[服务]

[客户]

因此,如果自跟踪实体和 WCF Ria 服务不能共存(这是我所怀疑的),一个跟踪如何变化?

0 投票
3 回答
6199 浏览

c# - 空 reference.cs 文件添加服务引用并选中重用类型选项

设想

  • 视觉工作室 2010
  • 银光4
  • 实体框架
  • 自我追踪实体

问题

在服务器端,我们使用实体框架模型生成了实体对象。我们使用自我跟踪 T4 模板来生成实体。这些实体是共享的,可以从客户端(Silverlight 4 项目)使用。

但是当我们尝试添加新的 Web 服务引用时,代理生成器不起作用。reference.cs 文件为空。我们已经检查了 Web 参考配置中的“重用类型”选项。我们已经检查了将被共享的程序集(仅限实体程序集)。

我们试图从实体的 DataContract 属性中删除每个 (IsReference=true),但它不起作用。

任何想法或解决方法?

0 投票
1 回答
426 浏览

wcf - 通过 WCF 验证自我跟踪实体 (EF)

在添加/更新实体时,我无法定义我OperationContract应该是什么。我想ObjectContext通过 WCF 服务发送一个实体(或实体列表)(这将为我实例化一个业务管理器以进行实际验证)。

如果实体通过了所有验证规则(这很可能需要查询数据库以确定更复杂的业务规则的通过/失败),它将被保存到数据库中,我需要能够传回它的 ID(身份列主键)和并发令牌的值(时间戳列),但如果它失败了,显然我们希望有一条或多条消息说明出了什么问题。在更新的情况下,我们需要的只是并发令牌的新值,但我们同样需要验证消息。

为了使它更棘手,一个实体也可以有多个子/孙实体。例如,行程将有止损,可能有订单。

我只是想知道人们如何在现实世界中处理这个问题。最简单的示例仅显示 WCF 服务的操作,例如:

有没有人有任何处理这个的好主意?我想我真的只是在这里寻找实用的建议。

我们是否应该尝试在一个服务调用中保存一组对象?

我们是否应该通过故障合约来传达验证消息?

任何建议/意见都会有所帮助,谢谢!

0 投票
2 回答
881 浏览

wcf - 调试自跟踪实体 - 由于对象的键值与 ObjectStateManager 中的另一个对象冲突而导致的 AcceptChanges 异常

将更改保存到自我跟踪实体时发生异常:

我相信该问题已在其他问题中得到解决,例如:自我跟踪实体 - AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突

我的问题是在开发和生产中调试此问题的最佳方法是什么。是否有任何可以捕获/访问的进一步信息,这些信息将详细说明导致异常的实体或实体类型。

如果不是,我是否必须编写一些东西来遍历对象图以查找引用不同对象的重复键?如果是这样,有人有这方面的经验吗?

更多信息:

我的场景涉及以下内容 - 客户端通过 WCF 服务检索一个实体,该服务包含更多实体的集合,所有这些实体都具有与其他实体的各种 FK。这些 FK 关系都包含在 linq 查询中,因此我们有一个完整的对象图。

客户端中的视图使用以前获取的静态数据实体,例如查找表以提高性能。如果我们对 User 说一个带有 FK 的 Customer 对象,它将在从服务中检索时加载。如果我们现在将另一个实体添加到对象图中,例如 Order 并在该对象上设置一个 User 属性,该属性与 Customer 对象中的 Id 相同,但该实体是在不同的点检索到的,因此使用不同的 ObjectContext(即对象具有相同的 ID 但不是对象的相同实例)我收到此错误。

指向另一个问题的链接演示了避免这种情况的方法,但我希望找到有关哪些实体导致问题的更多信息,以便我可以追踪错误。

0 投票
2 回答
676 浏览

wpf - 自我跟踪实体流量优化

我正在使用带有实体框架和自我跟踪实体的 WPF 进行个人项目。我有一个 WCF Web 服务,它公开了一些用于 CRUD 操作的方法。今天我决定做一些测试,看看这个服务实际上会发生什么,即使我预料到会发生这样的事情,我真的很失望。问题在于,对于仅针对一个对象的简单更新(或删除)操作 - 假设我向服务器发送整个对象图的类别,包括其所有父类别、它们的项目、子类别及其项目等。我我的案例是一个 170 KB 的 xml 文件,位于一个非常小的数据库(2 个主要类别,总共大约 20 个和大约 60 个项目)。我无法想象如果我有一个非常大的数据库会发生什么。

我试图用谷歌搜索一些关于 STE 流量优化的文章,但没有成功,所以我决定在这里询问是否有人做过类似的事情,知道一些好的做法等。

我提出的一种可能方法是通过更多服务调用来获取每个对象所需的数据:

代替:

这样,类别和项目将被分开,并且在进行更改或删除某些对象时,通过网络发送的数据会更少。

你们中是否有人遇到过类似的问题,您是如何解决的或者您是如何解决的?

0 投票
1 回答
206 浏览

.net - 自我追踪实体 清除收藏

我有一个 STE,我想清除诸如 customer.Orders.Clear() 之类的导航属性集合。但是 Clear 不会将订单标记为已删除,因此它们不会在 ApplyChanges 调用中被删除。是否有任何内置方法可以清除订单并将所有订单标记为已删除?

0 投票
1 回答
735 浏览

domain-driven-design - 使用 STE 与 POCO 的 DDD

使用 Microsoft 技术(我们可以完全控制所有组件)使用 DDD(o 更好的 DDDD,因为我们使用 WCF)开发 n 层应用程序,最好的选择似乎是 STE 与 POCO(这最后一个强制使用 DTO) . 这是正确的?在您看来,在我们需要的地方使用 STE 和 DTO 是否有意义?

谢谢。