0xb*_*00d 23 c# sql ef-code-first entity-framework-4.1
我正在使用实体框架和Code First方法.基类DbContext具有创建和删除数据库以及检查其存在的功能.
我想检查一个特殊的表(实体)是否存在.是否可以使用框架实现或者我是否需要编写自定义方法?如果我需要编写自己的实现,那么最通用的方法是什么?
谢谢你的帮助.
Lad*_*nka 33
如果需要检查表的存在,则必须调用自定义SQL代码:
bool exists = context.Database
                     .SqlQuery<int?>(@"
                         SELECT 1 FROM sys.tables AS T
                         INNER JOIN sys.schemas AS S ON T.schema_id = S.schema_id
                         WHERE S.Name = 'SchemaName' AND T.Name = 'TableName'")
                     .SingleOrDefault() != null;
表名默认定义为DbSet派生上下文中公开的名称,但默认名称可以通过流畅的API ToTable方法或Table数据注释覆盖.
以通用方式执行此操作不是代码优先方法中的假设.这将需要浏览元数据并手动探索实体映射到哪个表 - 这可能非常复杂,因为实体可以映射到多个表.代码优先不提供对元数据的访问.您必须转换DbContext为ObjectContext并浏览MetadataWorkspace.
编辑:
要转换DbContext为ObjectContext使用此:
ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
我无法在以前的帖子中添加评论。我正在使用 SQL Compact,但我不知道表的架构。我正在使用此代码来检查表它与上一篇文章中的非常相同,但它适用于任何表。
    /// <summary>
    /// Check if data table is exist in application
    /// </summary>
    /// <typeparam name="T">Class of data table to check</typeparam>
    /// <param name="db">DB Object</param>
    public static bool CheckTableExists<T>(this ModelLocker db) where T : class
    {
        try
        {
            db.Set<T>().Count();
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
| 归档时间: | 
 | 
| 查看次数: | 23892 次 | 
| 最近记录: |