看看我的Elmah错误日志,我看到InvalidOperationException来自Entity Framework 的一些s处理:
The context cannot be used while the model is being created.
Run Code Online (Sandbox Code Playgroud)
这是Nuget最新的EF CodeFirst库.我能够在网上找到的唯一信息是,它是由数据上下文作为单例引起的,这当然不是我的情况.在我的Windsor安装程序中,我的EF工作单元结构正在注册:
container.Register(Component.For<IUnitOfWork>()
.ImplementedBy<EFUnitOfWork>()
.LifeStyle
.PerWebRequest);
Run Code Online (Sandbox Code Playgroud)
我能够通过在VS中点击F5来重新创建错误以启动调试会话,并且当IIS正在启动时,将第二个网页加载到调试会话.
我怀疑这是因为用户试图访问系统而Asp.net由于缺乏活动而卸载,这是有道理的,因为我的产品目前处于非常小的beta测试中.但是,由于真实的人正在使用带有实时数据的网站,我需要尽可能少的错误.
有谁知道如何防止这种情况发生?
container.Register(Component.For<IUnitOfWork>().ImplementedBy<EFUnitOfWork>().LifeStyle.PerWebRequest);
using (var context = new MyJobLeadsDbContext())
{
context.Set<UnitTestEntity>().Any();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在IIS加载应用程序时尝试执行第二个Web请求时,仍会发生上一个错误
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
at MyApp.DomainModel.Queries.Users.UserByEmailQuery.Execute() in C:\Users\KallDrexx\Documents\Projects\MyApp\MyApp.DomainModel\Queries\Users\UserByEmailQuery.cs:line 44
at MyApp.Infrastructure.MyAppMembershipProvider.GetUser(String email, Boolean userIsOnline) in C:\Users\KallDrexx\Documents\Projects\MyApp\MyApp\Infrastructure\MyAppMembershipProvider.cs:line 102
at System.Web.Security.Membership.GetUser(String username, Boolean userIsOnline)
at System.Web.Security.Membership.GetUser()
at MyApp.MyAppBaseController.Initialize(RequestContext …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个控制台应用程序,我试图使用Entity Framework动态创建数据库和表来存储数据.但是,当我尝试将数据添加到我的DbSet.我收到以下错误.
EntityFramework.dll中发生了未处理的"System.InvalidOperationException"类型异常
附加信息:创建模型时无法使用上下文.如果在OnModelCreating方法中使用上下文,或者同时由多个线程访问相同的上下文实例,则可能抛出此异常.请注意,DbContext和相关类的实例成员不保证是线程安全的.
我已经提到了其他类似错误的帖子,但没有一个解决方案有效.这是一个单线程应用程序.
错误发生在行
this.context.Environments.Add(entity)
Run Code Online (Sandbox Code Playgroud)
DataSource.cs
public class DataSource
{
private static DataSource instance;
public DataSource()
{
this.context = new CounterContext();
}
public static DataSource Instance
{
get
{
return instance ?? (instance = new DataSource());
}
}
private CounterContext context;
public void AddCockpitEnvironmentDetails(IList<Environment> environmentList)
{
foreach (var entity in environmentList)
{
this.context.Environments.Add(entity);
}
this.context.SaveChanges();
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的背景:
public class CounterContext : DbContext
{
public CounterContext()
: base("name=CounterDbString")
{
Database.SetInitializer<CounterContext>(new CreateDatabaseIfNotExists<CounterContext>());
}
public DbSet<CounterData> CounterDetails …Run Code Online (Sandbox Code Playgroud)