如何在OnModelCreating
中运行查询?
我正在尝试运行查询,然后根据该列忽略实体中的列。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var d = this.Database.SqlQuery<int?>(@"select 1 from sys.columns where Name = N'columnname' and Object_ID = Object_ID(N'tablename')").SingleOrDefault();
if(d == null)
{
depEntity.Ignore(d => d.colmnname);
}
}
我收到以下错误:
创建模型时无法使用上下文。如果在OnModelCreating方法中使用上下文,或者同时由多个线程访问相同的上下文实例,则可能抛出此异常。请注意,DbContext和相关类的实例成员不保证是线程安全的。 (详见内部异常。)
System.InvalidOperationException:创建模型时无法使用上下文。如果在OnModelCreating方法中使用上下文,或者同时由多个线程访问相同的上下文实例,则可能抛出此异常。请注意,DbContext和相关类的实例成员不保证是线程安全的。
答案 0 :(得分:0)
我认为两种情况都应该有两个上下文类。并且应该在 Factory 中调用您的查询以选择应该返回哪个实例的类:
public class CommonContext : DbContext
{
//common stuff...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//common stuff...
}
}
public class IgnoreContext : CommonContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<DepEntity>().Ignore(d => d.colmnname);
}
}
public ContextFactory()
{
public CommonContext CreateContext()
{
var ctx = new CommonContext();
var d = ctx.Database.SqlQuery<int?>(@"select 1 from sys.columns where Name = N'columnname' and Object_ID = Object_ID(N'tablename')").SingleOrDefault();
if(d != null)
return ctx;
return new IgnoreContext();
}
}