C# 如何确定当前数据上下文中是否存在实体?
例如,假设我正在创建或获取一些稍后计划插入、更新或放弃的实体:C# 如何确定当前数据上下文中是否存在实体?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,例如,假设我正在创建或获取一些稍后计划插入、更新或放弃的实体: foreach (var foo in foos) { if (foo.condition) _myEntityCollection.Add(new Some_Entity_Type()); else _myEntityCollection.Add(dc.Some_Entity_Types .Where(t => t.ID == someID).FirstOr
foreach (var foo in foos) {
if (foo.condition)
_myEntityCollection.Add(new Some_Entity_Type());
else
_myEntityCollection.Add(dc.Some_Entity_Types
.Where(t => t.ID == someID).FirstOrDefault());
}
当涉及到(比如)恢复时,我可以这样做:
// Exception gets thrown here if entity didn't exist in data context
_myEntityCollection.ForEach(t => dc.Refresh(RefreshMode.OverwriteCurrentValues, t));
我希望能够遍历
\u myEntityCollection
,并确定该实体是我获取的实体,还是新实体。您可以使用对象状态管理器测试对象上下文是否知道特定实体
var objectStateManager = context.ObjectStateManager;
ObjectStateEntry temp;
var result = objectStateManager.TryGetObjectStateEntry(myEntity, out temp);
更新
上面的代码适用于实体框架,但问题涉及LINQ到SQL。您可以尝试检查由返回的。它包含三个添加、删除和更新实体的列表。我应该指定我使用的是Linq DataContext,而不是ObjectContext(我不太熟悉)。您知道DataContext是否存在遗留问题吗?不幸的是,我不知道如何将其从实体框架转换为LINQ到SQL-几年前我只使用过一次LINQ到SQL,而且我不熟悉其内部结构。我(可能)找到了一个解决方案-更新我的答案。这确实会增加很多开销。我可能会创建一个包装器来跟踪上下文中是否存在实体。谢谢