关于如何运行查询的任何想法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 和相关类的实例成员是线程安全的。
我认为对于这两种情况你应该有两个上下文类。并且您的查询应该在内部调用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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)