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

Ric*_*ard 5 entity-framework ef-code-first dbcontext

我有一种情况,我可能正在使用多个DbContexts,可能包含或不包含SomeEntity的DbSet.

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

实体类型SomeEntity不是当前上下文的模型的一部分.

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

理查德

Lad*_*nka 10

调用时应立即抛出异常,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);
}
Run Code Online (Sandbox Code Playgroud)