If you need to check existence of the table you must call custom SQL code:
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;
Table name is defined by default as the name of DbSet
exposed on your derived context but the default name can be overriden either by fluent API's ToTable
method or Table
data annotation.
Doing this in the generic way is not something supposed in code first approach. That will require browsing metadata and manually explore to which table is the entity mapped - this can be pretty complex because entity can be mapped to multiple tables. Code first doesn't offer access to metadata. You must convert DbContext
to ObjectContext
and browse MetadataWorkspace
.
Edit:
To convert DbContext
to ObjectContext
use this:
ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;