entity-framework - 如何检查模型中是否存在 DbContext.Set<T>?

标签 entity-framework ef-code-first dbcontext

我有一种情况,我可能正在使用多个 DbContext,这些 DbContext 可能包含也可能不包含 SomeEntity 的 DbSet。

自然,如果我触发 SaveChanges 并且此实体不存在,则会发生以下错误:

The entity type SomeEntity is not part of the model for the current context.



如何检查模型中是否存在实体或实体集,如果不存在,如何将有问题的代码段短路?

理查德

最佳答案

当您调用 Set<NotMappedEntityType> 时,应立即抛出异常。所以最简单的方法是捕获异常并根据需要处理它。

复杂的解决方案要求您浏览映射元数据并搜索必须与 CLR 类型同名的映射实体类型。您可以在派生的上下文类中添加此方法以检查实体类型是否存在:

public bool Exists<TEntity>() where TEntity : class
{
    string entityName = typeof(TEntity).Name;
    ObjectContext objContext = ((IObjectContextAdapter)this).ObjectContext;
    MetadataWorkspace workspace = objContext.MetadataWorkspace;
    return workspace.GetItems<EntityType>(DataSpace.CSpace).Any(e => e.Name == entityName);
}

关于entity-framework - 如何检查模型中是否存在 DbContext.Set<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10749307/

相关文章:

wcf - EF 4.1 Code First - 使用新上下文/WCF 时未更新 FK 值的更改

c# - DbContext.SaveChanges();不给出错误但不将实体添加到数据库

entity-framework - 如何在 Code First 中在多个上下文(相同基础的)之间动态切换

c# - 更新 edmx 模型后,DbContext 呢?

c# - 仅在 MVC 编辑模板中编辑值

c# - 带有 ExecuteSqlCommandAsync 的输出参数

c#-4.0 - 将两个属性一对多映射到同一个集合

c# - 加载后如何使用 POCO 和 DbContext 初始化 Entity Framework 中的对象?

.net - Entity Framework - 热切加载相关实体

entity-framework - 如何首先在代码中使用迁移添加计算列?