相关疑难解决方法(0)

如何防止EF"在创建模型时无法使用上下文"错误?

看看我的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测试中.但是,由于真实的人正在使用带有实时数据的网站,我需要尽可能少的错误.

有谁知道如何防止这种情况发生?


编辑:我更新了我的windsor控制器,现在包含以下代码:

        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请求时,仍会发生上一个错误


编辑2:根据要求,这是堆栈

   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)

c# entity-framework ef-code-first entity-framework-4.1

30
推荐指数
2
解决办法
3万
查看次数

实体框架 - 在创建模型时不能使用上下文

我正在尝试创建一个控制台应用程序,我试图使用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)

c# entity-framework

4
推荐指数
1
解决办法
1万
查看次数