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;
Run Code Online (Sandbox Code Playgroud)
表名默认定义为DbSet
派生上下文中公开的名称,但默认名称可以通过流畅的API ToTable
方法或Table
数据注释覆盖.
以通用方式执行此操作不是代码优先方法中的假设.这将需要浏览元数据并手动探索实体映射到哪个表 - 这可能非常复杂,因为实体可以映射到多个表.代码优先不提供对元数据的访问.您必须转换DbContext
为ObjectContext
并浏览MetadataWorkspace
.
编辑:
要转换DbContext
为ObjectContext
使用此:
ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
Run Code Online (Sandbox Code Playgroud)
我无法在以前的帖子中添加评论。我正在使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23892 次 |
最近记录: |